From 365712e463eb9db23e9617ca79fdac407753b42d Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Fri, 28 Feb 2025 14:55:38 +0900 Subject: [PATCH] =?UTF-8?q?[Gold=20III]=20Title:=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C,=20Time:=2088=20ms,=20Memory:=2037104=20KB?= =?UTF-8?q?=20-BaekjoonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Gold/1516. 게임 개발/README.md | 32 +++++++++++++++++++++++ 백준/Gold/1516. 게임 개발/게임 개발.py | 36 ++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 백준/Gold/1516. 게임 개발/README.md create mode 100644 백준/Gold/1516. 게임 개발/게임 개발.py diff --git a/백준/Gold/1516. 게임 개발/README.md b/백준/Gold/1516. 게임 개발/README.md new file mode 100644 index 0000000..dad301d --- /dev/null +++ b/백준/Gold/1516. 게임 개발/README.md @@ -0,0 +1,32 @@ +# [Gold III] 게임 개발 - 1516 + +[문제 링크](https://www.acmicpc.net/problem/1516) + +### 성능 요약 + +메모리: 37104 KB, 시간: 88 ms + +### 분류 + +방향 비순환 그래프, 다이나믹 프로그래밍, 그래프 이론, 위상 정렬 + +### 제출 일자 + +2025년 2월 28일 14:55:31 + +### 문제 설명 + +

숌 회사에서 이번에 새로운 전략 시뮬레이션 게임 세준 크래프트를 개발하기로 하였다. 핵심적인 부분은 개발이 끝난 상태고, 종족별 균형과 전체 게임 시간 등을 조절하는 부분만 남아 있었다.

+ +

게임 플레이에 들어가는 시간은 상황에 따라 다를 수 있기 때문에, 모든 건물을 짓는데 걸리는 최소의 시간을 이용하여 근사하기로 하였다. 물론, 어떤 건물을 짓기 위해서 다른 건물을 먼저 지어야 할 수도 있기 때문에 문제가 단순하지만은 않을 수도 있다. 예를 들면 스타크래프트에서 벙커를 짓기 위해서는 배럭을 먼저 지어야 하기 때문에, 배럭을 먼저 지은 뒤 벙커를 지어야 한다. 여러 개의 건물을 동시에 지을 수 있다.

+ +

편의상 자원은 무한히 많이 가지고 있고, 건물을 짓는 명령을 내리기까지는 시간이 걸리지 않는다고 가정하자.

+ +### 입력 + +

첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부터 N까지로 하고, 각 줄은 -1로 끝난다고 하자. 각 건물을 짓는데 걸리는 시간은 100,000보다 작거나 같은 자연수이다. 모든 건물을 짓는 것이 가능한 입력만 주어진다.

+ +### 출력 + +

N개의 각 건물이 완성되기까지 걸리는 최소 시간을 출력한다.

+ diff --git a/백준/Gold/1516. 게임 개발/게임 개발.py b/백준/Gold/1516. 게임 개발/게임 개발.py new file mode 100644 index 0000000..ae3635a --- /dev/null +++ b/백준/Gold/1516. 게임 개발/게임 개발.py @@ -0,0 +1,36 @@ +import sys +import math +from collections import deque + +input = sys.stdin.readline + +N = int(input()) +time = [0] * (N+1) +build_time = [0] * (N+1) +a = [[] for _ in range(N+1)] +indegree = [0] * (N+1) + +for i in range(1, N+1): + temp = list(map(int, input().split())) + build_time[i] = temp[0] + time[i] = temp[0] + for k in temp[1:-1]: + a[k].append(i) + indegree[i] += 1 + +queue = deque() + +for i in range(1, N+1): + if(indegree[i]==0): + queue.append(i) + +while queue: + curr = queue.popleft() + for next in a[curr]: + indegree[next] -= 1 + build_time[next] = max(build_time[next], build_time[curr] + time[next]) + if indegree[next] == 0: + queue.append(next) + +for i in range(1, N+1): + print(build_time[i]) \ No newline at end of file