level - easy
[문제 내용]
전체 직원에 대한 정보가 주어지며, 각 직원의 id와 중요도, 부하직원에 대한 정보가 주어진다.
직원 id가 주어지면 해당 id에 대한 직원과 그 직원의 부하직원에 대한 중요도의 합을 구해 반환하면 된다.
단, 한 직원은 한명의 직속상사를 가지며, 부하직원은 여러명일 수 있다.
[example 1]
Input: employees = [[1,5,[2,3]],[2,3,[]],[3,3,[]]], id = 1
Output: 11
Explanation: Employee 1 has importance value 5, and he has two direct subordinates: employee 2 and employee 3.
They both have importance value 3.
So the total importance value of employee 1 is 5 + 3 + 3 = 11.
[example 2]
Input: employees = [[1,2,[5]],[5,-3,[]]], id = 5
Output: -3
[해결 방법]
먼저 employee에 대한 class는 아래와 같다.
class Employee {
var id: Int = 0
var importance: Int = 0
var subordinates: List<Int> = listOf()
}
탐색할 id를 저장할 변수 list를 생성한다.
입력 값으로 들어온 id를 생성한 list에 더하고
먼저 이 id에 대해 탐색한다.
해당 id를 찾으면 중요도를 더할 importance 변수에
해당 중요도를 더해준다.
그리고 부하직원이 있다면 해당 부하직원의 id를
위에서 만들어준 list에 해당 id들을 모두 저장해주고
탐색에 성공한 id는 삭제를 진행해준다.
위 내용을 코드로 작성하면 아래와 같다.
class Solution {
fun getImportance(employees: List<Employee?>, id: Int): Int {
// 탐색할 id를 저장할 변수
val ids = mutableListOf<Int>(id)
var importance = 0
// 더이상 찾을 id가 없을때까지 탐색
while(ids.size != 0) {
for (employee in employees) {
// id는 찾으면 계속 삭제해줄것이기 때문에 0번째로 고정해도 상관없다
if (employee?.id == ids[0]) {
// 같을 경우 중요도를 더해주고 id를 삭제후 부하직원 id를 저장한다
importance += employee.importance
ids.remove(ids[0])
for (sub in employee.subordinates) {
ids.add(sub)
}
break;
}
}
}
return importance
}
}