코딩테스트/BOJ

[백준] [위상정렬] 1516. 게임 개발

박소민 2023. 5. 6. 20:26
1516. 게임 개발
 

1516번: 게임 개발

첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부

www.acmicpc.net

 

 

  • 내 풀이
    • 위상정렬
from collections import deque

n=int(input())
time=[0]
indegree=[0]*(n+1)
graph=[[] for _ in range(n+1)]

for i in range(1,n+1):
    tmp=list(map(int,input().split()))
    time.append(tmp.pop(0))
    while tmp:
        x=tmp.pop(0)
        if x==-1: break
        graph[x].append(i)
        indegree[i]+=1


result=[0]*(n+1)
queue=deque()
def solve():
    for i in range(1,n+1):
        if indegree[i]==0:
            queue.append(i)
  
    while queue:
        q=queue.popleft()
        result[q]+=time[q]
        for gp in graph[q]:
            result[gp]=max(result[gp],result[q])
            indegree[gp]-=1
  
            if indegree[gp]==0:
                queue.append(gp)

solve()
print(*result[1:], sep="\n")