문제 접근 및 공부 내용, 풀이는 모두 하단 코드에 "주석"으로 포함되어 있으니 참고해주세요.
문제 유형 보기
https://dailyalgo.kr/ko/problems/93
풀이
from heapq import heappop, heappush
def solution(todoList):
# 홀수 번째 날: 할 일을 받기만
# 짝수 번째 날: 할 일을 받은 후 쌓인 일 중 하나를 처리
# 각 일(todo)에는 이름, 마감 기한, 중요도가 부여됨.
# 처리 기준:
# 1. 마감 기한이 빠른 놈. (오름차순)
# 2. 중요도가 가장 높은 놈. -> 반대로 설계하자 (오름차순)
# 이름이 사전순으로 앞선 놈. (오름차순)
# n일동안 주어지는 할 일 정보 todoList
# 이름: 소문자, 중복 x -> 그냥 오름차순
# 마감 기한: MM/DD/YYYY -> '/'으로 split해서, 3 1 2 순서로 오름차순
# 중요도: 5가지 0~4 하면 될듯 -> 딕셔너리에 indexing 쓰면 될듯?
# 튜플 (YYYY, MM, DD, 중요도, 이름)
# 실제 우선 순위(중요도) 개념과 달리, 숫자가 작을 수록 중요도 높다고 생각
priorities = {'CRITICAL':0, 'HIGH':1, 'MODERATE':2, 'LOW':3, 'MINIMAL':4}
days = 0
heap = []
answer = []
# 이거 그냥 range(2*len(todoList))로 인덱스로 반복 돌려도 됨.
for todo in todoList:
# ex. ["presentation","11/10/2030","HIGH"]
days += 1
# 할 일을 받고
# 이거 튜플 그대로 넣어도 되긴 함 이중 튜플로
MM, DD, YYYY = map(int, todo[1].split('/'))
heappush(heap, (YYYY, MM, DD, priorities[todo[2]], todo[0]))
# 짝수날엔 쌓인 일 중 하나를 처리
if days % 2 == 0:
answer.append(heappop(heap)[4])
# 여기서부턴 받을 일이 없으므로, 그냥 짝수날에 처리만 함.
for _ in range(days):
days += 1
if days % 2 == 0:
answer.append(heappop(heap)[4])
return answer
'Algorithms & Languages > 파이썬 알고리즘 문제풀이' 카테고리의 다른 글
[Python/백준] 20040. 사이클 게임 (0) | 2025.02.27 |
---|---|
[Python/백준] 1717. 집합의 표현 (0) | 2025.02.27 |
[Python/프로그래머스] 42626. 더 맵게 (0) | 2025.02.26 |
[Python/DailyAlgo, 백준] 92. 우선순위 큐, 11279. 최대 힙, 11286. 절댓값 힙 (0) | 2025.02.26 |
[Python/백준] 1068. 트리 (0) | 2025.02.25 |