728x90
난이도 : 골드4
풀이일 : 05055
https://www.acmicpc.net/problem/2056
2056번: 작업
수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해
www.acmicpc.net
링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐
풀이코드
# 입력 시, temp 리스트 활용으로 project 삽입
# 새 누적 시간과 현재 누적 시간을 비교, 큰 값 저장
# 선행 작업 완료할 때 마다 count - 1
# count 0 되면 작업 시작 -> queue 추가
# 최종 누적 시간 중 가장 큰 값 출력
import sys
from collections import deque
N = int(sys.stdin.readline().strip())
time = [0] * N
count = [0] * N
project = [[] for _ in range(N)]
total = [0] * N
for i in range(N):
t, c, *temp = map(int, sys.stdin.readline().split())
time[i], count[i] = t, c
for p in temp:
project[p-1].append(i)
queue = deque()
for i in range(N):
if not count[i]:
queue.append(i)
total[i] = time[i]
while queue:
x = queue.popleft()
for y in project[x]:
count[y] -= 1
total[y] = max(total[x] + time[y], total[y])
if not count[y]:
queue.append(y)
print(max(total))
코드 구성
- time : 작업 개별 수행 시간
- count : 선행 작업 수
- project : 선행 작업
- total : 누적 시간
- 입력 시, temp 리스트 활용으로 project 삽입
- 새 누적 시간과 현재 누적 시간을 비교, 큰 값 저장
- 선행 작업 완료할 때 마다 count - 1
- count 0 되면 작업 시작 -> queue 추가
- 최종 누적 시간 중 가장 큰 값 출력
느낀점
며칠 째 비슷한 로직을 풀고 있어서 쉽고 재밌다. 이런 유형 다 풀어봐야지
입력 받을 때, 패킹을 사용해서 리스트에 넣는 작업이 특히 재밌었다.
'알고리즘 > 🥇 골드' 카테고리의 다른 글
백준 9470 Strahler 순서 파이썬 풀이 (0) | 2023.05.07 |
---|---|
백준 1516 게임개발 파이썬 풀이 (0) | 2023.05.06 |
백준 2252 줄세우기 파이썬 풀이 (0) | 2023.05.04 |
백준 1005 ACM Craft 파이썬 풀이 (0) | 2023.05.03 |
백준 1027 고층건물 파이썬 풀이 (0) | 2023.04.30 |