Algorithm/백준 알고리즘_Python
[알고리즘][Python] 백준(BOJ) 2056 작업_파이썬
알파이
2020. 10. 1. 08:08
2056 작업 www.acmicpc.net/problem/2056
2056번: 작업
수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 ��
www.acmicpc.net
문제 풀기 전 공부할 것 : 다이나믹 프로그래밍, 그래프 이론, 위상 정렬
풀이
<내용>
- K번 작업에 대해 선행 관계에 있는(즉, K번 작업을 시작하기 전에 반드시 먼저 완료되어야 하는) 작업들의 번호는 모두 1 이상 (K-1) 이하이므로 dp로 해결할 수 있다.
- 해당 작업에 걸리는 시간을 times에 저장하고 선행 작업을 graph에 저장한다.
- for문을 돌면서 해당 작업에 필요한 선행 작업들의 max 시간을 더한다.
- 작업에 필요한 시간들 중 최댓값을 출력한다.
<코드>
import sys
input = sys.stdin.readline
n = int(input())
times = [0] * (n+1)
graph = {}
for i in range(1, n+1):
lst = list(map(int, input().split()))
times[i] = lst[0]
if lst[1] == 0:
continue
for j in lst[2:]:
if i in graph:
graph[i].append(j)
else:
graph[i] = [j]
for i in range(1, n+1):
if i in graph:
time = 0
for j in graph[i]:
time = max(time, times[j])
times[i] += time
print(max(times))
728x90
반응형