새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

[백준] 1516 게임 개발

by 언호 2022. 7. 4.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

건물을 짓기 위해 필요한 건물의 개수와 해당 건물이 완성되면 다음에 건설 가능한 건물의 목록을 리스트로 관리하였습니다.

건물을 전체적으로 탐색하여 바로 건설이 가능한 목록을 찾은 후 해당 건물이 완성되면 건설이 가능한 다음 건물을 찾았습니다.

그 건물을 짓는데 필요한 앞 건물의 개수 카운트를 1씩 감소시켰고, 0이 되었을 때 건물을 짓도록 하였습니다.

2) 알고리즘

  • 위상정렬

3) 풀이 코드

사용 언어 - Python

import sys
from collections import deque
sys.stdin = open('input.txt')

N = int(sys.stdin.readline())       # 건물 수
linked = [[] for _ in range(N)]     # 각 건물이 완성되면 지을 수 있는 건물 목록
need = [0] * N                      # 건물 짓는데 필요한 앞 건물 개수
times = [0] * N                     # 건물 짓는데 소요 시간
answers = [0] * N                   # 건물 완성 시간

for idx in range(N):
    infos = list(map(int, sys.stdin.readline().split()))

    times[idx] = infos[0]               # 해당 건물 짓는데 소요 시간
    for i in range(1, len(infos)-1):
        linked[infos[i]-1].append(idx)  # 해당 건물을 짓기 위해 필요한 건물 기록
        need[idx] += 1                  # 건물 짓는데 필요한 앞 건물 개수 추가

q = deque()
for idx in range(N):                    # 앞 건물 없이 바로 지을 수 있으면
    if not need[idx]:                   # 큐에 추가
        q.append(idx)
        answers[idx] = times[idx]

while q:
    node = q.popleft()    
    for next in linked[node]:
        # 다음 건물 짓는데 필요한 건물 수 감소
        need[next] -= 1
        # 다음 건물 총 소요시간은 현재 건물 시간 + 다음 건물 시간
        answers[next] = max(answers[next], answers[node] + times[next])
        # 다음 건물을 짓기 위해 필요한 건물을 모두 지었다면, 큐에 추가
        if not need[next]:
            q.append(next)

for i in range(N):
    print(answers[i])

🔗 문제 링크

- https://www.acmicpc.net/problem/1516

 

1516번: 게임 개발

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

www.acmicpc.net

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 2623 음악프로그램  (0) 2022.07.06
[백준] 2660 회장뽑기  (0) 2022.07.05
[백준] 11437 LCA  (0) 2022.07.03
[백준] 9466 텀 프로젝트  (0) 2022.07.02
[백준] 11559 Puyo Puyo  (0) 2022.07.01

댓글