직원 정보의 데이터 구조가 있고 직원의 고유 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