Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 직원의 중요성

<시간/>

직원 정보의 데이터 구조가 있고 직원의 고유 ID, 중요도 값 및 직속 부하의 ID가 있다고 가정합니다. 예를 들어 직원 1은 직원 2의 리더이고 직원 2는 직원 3의 리더입니다. 그리고 중요도 값이 각각 15, 10 및 5라고 가정합니다. 그러면 직원 1은 [1, 15, [2]]와 같은 데이터 구조를 갖고 직원 2는 [2, 10, [3]], 직원 3은 [3, 5, []]와 같은 데이터 구조를 갖습니다.

따라서 회사의 직원 정보와 직원 ID가 있는 경우 이 직원과 모든 부하 직원의 총 중요도 값을 찾아야 합니다.

따라서 입력이 [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1과 같으면 출력은 Emp1과 같이 11이 됩니다. 중요도 값이 5이고 Emp1의 직속 부하가 Emp2와 Emp3입니다. 이제 둘 다 중요도 값이 3입니다. 따라서 Emp1의 총 중요도 값은 5 + 3 + 3 =11입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 무게 :=새 지도, 리더 :=새 지도
  • 직원의 각 e에 대해 다음을 수행합니다.
    • 무게[e[0]] :=e[1]
    • 리더[e[0]] :=e[2]
  • res :=0
  • res :=res + weight[id]
  • 대기열 :=리더[id]
  • 대기열이 0이 아닌 동안 수행합니다.
    • new_queue :=새 목록
    • 노드:=큐에서 마지막 요소 삭제
    • res :=res + weight[노드]
    • leader[node]가 0이 아니면
      • new_queue :=new_queue + leader[리더의 크기]
    • 대기열 :=대기열 + new_queue
  • 반환 결과

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution(object):
   def getImportance(self, employees, id):
      weight = {}
      leader = {}
      for e in employees:
         weight[e[0]] = e[1]
         leader[e[0]] = e[2]
      res = 0
      res += weight[id]
      queue = leader[id]
      while queue:
         new_queue = []
         node = queue.pop()
         res += weight[node]
         if leader[node]:
            new_queue += leader[node]
         queue += new_queue
      return res
ob = Solution()
print(ob.getImportance([[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1))

입력

[[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1

출력

11