Programming/백준
백준 17952 - 과제는 끝나지 않아! (파이썬)
pental
2025. 3. 7. 13:56
https://www.acmicpc.net/problem/17952
풀이
문제 이해
- 교수님이 과제를 주는데, 과제 수행 도중 새로운 과제가 주어질 수도 있다.
- 학생은 현재 수행 중인 과제를 잠시 미뤄두고 새로운 과제를 시작해야 한다.
- 한 번의 작업이 끝나면, 수행 중이던 과제를 이어서 해야 한다.
- 만약 과제가 끝나면 점수를 얻게 된다.
- 모든 과제가 끝난 후 얻은 총 점수를 출력하는 문제이다.
과제 수행 로직
- info[0] == 1 → 새로운 과제 주어짐
- 과제 점수 a, 소요 시간 t를 입력받는다.
- 만약 t == 1이면 즉시 완료되므로 score에 a를 추가한다.
- 그렇지 않다면 (a, t-1)을 스택에 저장한다.
- info[0] == 0 → 현재 진행 중인 과제 수행
- 스택이 비어 있지 않다면, 가장 최근의 (a, t)를 pop()
- t == 1이면 과제 완료 → score += a
- 그렇지 않다면 (a, t-1)을 다시 스택에 저장.
코드
# 백준 17952 - 과제는 끝나지 않아!
# 분류 : 구현, 자료 구조, 스택
import sys
input = sys.stdin.readline
N = int(input())
stack = []
score = 0
for _ in range(N) :
info = list(map(int, input().split()))
if info[0] == 0 :
if len(stack) != 0 :
a, t = stack.pop()
if t == 1 :
score += a
else :
stack.append((a, t - 1))
if info[0] == 1 :
a = info[1]
t = info[2]
if t == 1 :
score += a
else :
stack.append((a, t - 1))
print(score)