코딩테스트/백준
[백준] 17952번: 과제는 끝나지 않아! (파이썬)
mandus
2024. 11. 24. 22:39
✅문제: 17952번
📌문제풀이
주어진 시간 동안 처리해야 하는 과제들에서 점수를 계산하는 문제임. 각 과제는 점수와 소요 시간이 주어지며, 시간당 한 과제를 처리하며 점수를 얻음.
- 스택 구현
- 각 과제는 (점수, 남은 시간) 형태로 스택에 저장함.
- 새로운 과제가 주어지면 스택에 추가하며, 현재 처리 중인 과제를 1분씩 진행함.
- 시간 감소 및 과제 완료 처리
- 스택의 마지막 과제(현재 진행 중인 과제)의 남은 시간을 1분씩 감소시킴.
- 남은 시간이 0이 되면 과제를 완료하고 해당 점수를 total_score에 추가함.
- 최종 점수 출력
- 주어진 모든 시간 동안 처리 가능한 과제를 완료하며 점수를 계산함.
- 최종적으로 얻은 총 점수를 출력함.
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
📌후기
- 과제의 남은 시간을 스택으로 관리하며, 매분마다 처리되는 과제를 추적하는 구현을 어떻게 할지 생각하는 연습에 좋았던 것 같음.