Programming/백준

백준 17952 - 과제는 끝나지 않아! (파이썬)

pental 2025. 3. 7. 13:56

https://www.acmicpc.net/problem/17952

풀이

문제 이해

  • 교수님이 과제를 주는데, 과제 수행 도중 새로운 과제가 주어질 수도 있다.
  • 학생은 현재 수행 중인 과제를 잠시 미뤄두고 새로운 과제를 시작해야 한다.
  • 한 번의 작업이 끝나면, 수행 중이던 과제를 이어서 해야 한다.
  • 만약 과제가 끝나면 점수를 얻게 된다.
  • 모든 과제가 끝난 후 얻은 총 점수를 출력하는 문제이다.

과제 수행 로직

  1. info[0] == 1 → 새로운 과제 주어짐
    1. 과제 점수 a, 소요 시간 t를 입력받는다.
    2. 만약 t == 1이면 즉시 완료되므로 score에 a를 추가한다.
    3. 그렇지 않다면 (a, t-1)을 스택에 저장한다.
  2. info[0] == 0 → 현재 진행 중인 과제 수행
    1. 스택이 비어 있지 않다면, 가장 최근의 (a, t)를 pop()
    2. t == 1이면 과제 완료 → score += a
    3. 그렇지 않다면 (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)