Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Be
- 환급챌린지
- KDT
- 국비지원교육
- 티스토리챌린지
- 패스트캠퍼스
- 오픈패스
- 백엔드
- 백엔드 부트캠프
- 내일배움카드
- 백준
- 내일배움캠프
- 디자인챌린지
- 오블완
- UXUI기초정복
- Spring
- baekjoon
- OPENPATH
- 디자인강의
- UXUI챌린지
- mysql
- UXUIPrimary
- 백엔드개발자
- 디자인교육
- 부트캠프
- 오픈챌린지
- Java
- 객체지향
- 국비지원
- 국비지원취업
Archives
- Today
- Total
군만두의 IT 공부 일지
[백준] 17952번: 과제는 끝나지 않아! (파이썬) 본문
✅문제: 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
📌후기
- 과제의 남은 시간을 스택으로 관리하며, 매분마다 처리되는 과제를 추적하는 구현을 어떻게 할지 생각하는 연습에 좋았던 것 같음.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 11057번: 오르막 수 (파이썬) (0) | 2024.11.26 |
---|---|
[백준] 9095번: 1, 2, 3 더하기 (0) | 2024.11.25 |
[백준] 1260번: DFS와 BFS (0) | 2024.11.20 |
[백준] 2293번: 동전 1 (파이썬) (2) | 2024.11.19 |
[백준] 1181번: 단어 정렬 (파이썬) (1) | 2024.11.18 |
Comments