Leetcode Java Time Needed to Inform All Employees
업데이트:
문제
코드
class Solution {
public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) {
int result = 0;
for (int i = 0; i < n; i++) {
result = Math.max(result, this.dfs(manager, informTime, i));
}
return result;
}
private int dfs(int[] manager, int[] informTime, int i) {
if (manager[i] != -1) {
informTime[i] += this.dfs(manager, informTime, manager[i]);
manager[i] = -1;
}
return informTime[i];
}
}
결과
설명
- [0, $n - 1$] 범위의 직원 ID가 존재하는데 사장 ID는 headID이며, 관리자들의 ID를 담은 manager와 전파하는데 걸리는 시간을 담은 informTime을 이용하여 사장이 모든 직원에게 전파하는데 걸리는 시간을 반환하는 문제이다.
- 단, manager[headID] = -1 이다.
-
result는 모든 직원에게 전파하는데 걸리는 시간을 담을 변수로, 0으로 초기화한다.
- 0부터 n 미만까지 i를 증가시키며 아래를 수행한다.
- result에 result와 4번에서 정의한 dfs(int[] manager, int[] informTime, int i)를 수행한 결과 중 큰 값을 넣어준다.
- DFS 방식으로 전파하는데 걸리는 시간을 구하기 위한 dfs(int[] manager, int[] informTime, int i) 메서드를 정의한다.
- manager의 i번째 값이 아닌 경우, 아래를 수행한다.
- infromTime의 i번째 위치에 i번째 manager의 ID를 i에 넣어 재귀 호출한 결과를 넣어준다.
- 전파 시간을 informTime에 넣었으므로, manager의 i번째 위치에 -1을 넣어 다음 호출에 무시하도록 처리한다.
- informTime의 i번째 값을 반환한다.
- manager의 i번째 값이 아닌 경우, 아래를 수행한다.
- 전파하는데 걸리는 시간을 담은 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기