문제
There is a company in which the relationships of employees are hierarchical.
For example, If there is a subordinate B whose boss is A, then B's subordinate C is also a subordinate of A.
A HR staff wants to know the total number of subordinates for a specific employee in the company.
Complete a function that returns the sum of subordinates of employee from hierarchcy.Each employee cannot be duplicated.
매개변수
- hierarchy :Object type with employees with subordinates
- employee : String type
아웃풋
- Number Type : the total number of subordinates including employee should be returned.
예시
const hierarchy = {
A: ["B", "C"],
B: ["D", "E"],
C: ["F"],
D: ["G", "H", "I"],
E: ["J", "K"],
F: ["L", "M"],
G: ["N", "O", "P"],
H: ["Q", "R"],
J: ["S"],
L: ["T", "U", "V"],
};
const employee = 'B';
const output = sumOfSubOrdinates(hierarchy, employee);
console.log(output); // 14
솔루션1 (DFS)
결과를 담을 변수 result 선언하기
dfs를 통해 부하직원이 있는 경우 result에 1을 더해주기
function sumOfSubOrdinates(hierarchy, employee) {
// 결과를 담을 변수를 선언하고 1을 할당 (employee 본인을 포함해야 하기 때문)
let result = 1;
// dfs 함수 제작 (전달인자 str에는 직원에 해당하는 문자열 입력)
function dfs (str) {
// subordinate가 없는 경우 바로 리턴
if (!hierarchy[str]) return;
// subordinate가 있는 경우 배열을 순회하기
for (let ele of hierarchy[str]) {
result += 1;
dfs(ele)
}
}
dfs(employee);
return result;
}
솔루션2 (DFS)
선언된 result 배열에 부하직원을 push하여, 배열 엘리먼트 개수 구하기
function sumOfSubOrdinates(hierarchy, employee) {
// start로 특정직원을 넣어주기
let result = [employee];
//호출할 재귀 aux
const aux = function (hierarchy, node) {
//base case 더 이상 부하직원이 없을 때,
if (hierarchy[node] === undefined) return;
//recursive case 탐색할 부하직원이 있을 때,
else {
const needChecked = hierarchy[node];
for (let i = 0; i < needChecked.length; i++) {
//확인된 부하직원은 result에 계속 넣어준다.
result.push(needChecked[i]);
aux(hierarchy, needChecked[i]);
}
}
};
aux(hierarchy, employee);
return result.length;
}
반응형
'프로그래밍 > 알고리즘, 프로그래밍 언어' 카테고리의 다른 글
[JavaScript] async/await을 array.map에 사용 시 Promise { <pending> } 에러 (0) | 2022.08.10 |
---|---|
[코딩테스트] Police chase - Queue (JavaScript) (0) | 2022.02.07 |
[코딩테스트] 나선형 순회 spiralTraversal (JavaScript) (0) | 2022.02.07 |
[BFS] 1에서 가장 먼 노드의 개수 구하기 (JavaScript) (0) | 2022.02.04 |
[코딩테스트] identical characters (JavaScript) (0) | 2022.02.03 |
댓글