군만두의 IT 공부 일지

[백준] 17952번: 과제는 끝나지 않아! (파이썬) 본문

코딩테스트/백준

[백준] 17952번: 과제는 끝나지 않아! (파이썬)

mandus 2024. 11. 24. 22:39

✅문제: 17952번

📌문제풀이

주어진 시간 동안 처리해야 하는 과제들에서 점수를 계산하는 문제임. 각 과제는 점수와 소요 시간이 주어지며, 시간당 한 과제를 처리하며 점수를 얻음.

  1. 스택 구현
    • 각 과제는 (점수, 남은 시간) 형태로 스택에 저장함.
    • 새로운 과제가 주어지면 스택에 추가하며, 현재 처리 중인 과제를 1분씩 진행함.
  2. 시간 감소 및 과제 완료 처리
    • 스택의 마지막 과제(현재 진행 중인 과제)의 남은 시간을 1분씩 감소시킴.
    • 남은 시간이 0이 되면 과제를 완료하고 해당 점수를 total_score에 추가함.
  3. 최종 점수 출력
    • 주어진 모든 시간 동안 처리 가능한 과제를 완료하며 점수를 계산함.
    • 최종적으로 얻은 총 점수를 출력함.
import sys
input = sys.stdin.readline

tasks = []
total_score = 0
n = int(input().strip())

for _ in range(n):
    input_data = list(map(int, input().split()))

    if input_data[0] == 1:
        # 새로운 과제가 주어진 경우
        score, time_required = input_data[1], input_data[2]
        tasks.append([score, time_required])

    # 현재 처리 중인 과제가 있는 경우
    if tasks:
        tasks[-1][1] -= 1
        if tasks[-1][1] == 0:
            total_score += tasks.pop()[0]

print(total_score)

 

이 코드의 예제 입출력 과정은 아래와 같이 진행할 수 있음.

# 예제 입력 1
3
1 100 3
0
0

 

  • 1분째: 새로운 과제 (100, 3) 추가, 남은 시간 감소 → [100, 2]
  • 2분째: 과제 진행 → [100, 1]
  • 3분: 과제 완료, 점수 += 100, 스택 비우기

 

 
# 예제 출력 1
100

📌후기

  • 과제의 남은 시간을 스택으로 관리하며, 매분마다 처리되는 과제를 추적하는 구현을 어떻게 할지 생각하는 연습에 좋았던 것 같음.
Comments