https://www.acmicpc.net/problem/1135
문제
풀이
깊이 우선 탐색과 DP를 활용하여 문제를 풀어주었습니다.
DFS방식을 사용하여 리프 노드에 도달한 뒤, 리프 노드에서부터 오름차순으로 걸리는 시간을 계산해줍니다.
코드
# 1135번 뉴스 전하기
num = int(input())
order = list(map(int, input().split()))
tree = [[] for _ in range(num)]
for idx, manager in enumerate(order):
if idx != 0:
tree[manager].append(idx)
dp = [0 for _ in range(num)]
def dfs(node):
node_to_sub = []
for sub in tree[node]:
dfs(sub)
node_to_sub.append(dp[sub])
# 만일 부하직원이 존재한다면
if node_to_sub:
# 걸리는 시간을 내림차순으로 정렬
node_to_sub.sort(reverse=True)
# 리프노드까지의 뉴스 도달 시간이 많이 걸리는 부하직원부터 전달해준다.
# idx => 뉴스를 전달받는 부하 직원 순서, 뉴스를 전달 받는데 걸리는 대기시간을 뜻한다.
# amount => 직속 부하 직원으로부터 말단 직원(리프 노드)까지 뉴스가 도달하는데 걸린 시간.
choose_large_time = [amount + idx + 1 for idx, amount in enumerate(node_to_sub)]
maximum_time = max(choose_large_time)
dp[node] = maximum_time
dfs(0)
print(dp[0])
출력결과
'백준 > 다이내믹 프로그래밍' 카테고리의 다른 글
[백준][Python] 9084번 동전 - 코팩 (0) | 2024.01.04 |
---|---|
[백준][Python] 1788번 피보나치 수의 확장 - 코팩 (0) | 2023.08.30 |
[백준][Python] 10826번 피보나치 수 4 - 코팩 (0) | 2023.08.30 |
[백준][Python] 17175번 피보나치는 지겨웡~ - 코팩 (0) | 2023.08.30 |
[백준][Python] 7579번 앱 - 코팩 (0) | 2023.08.25 |