

문제 풀이
생각할게 많아서 꽤 어렵다고 느낀 문제입니다.
작업이 끝났을 때 대기하고 있는 작업을 확인하면 되는 문제였는데 저는 1초마다 자꾸 확인하려고 해서 빙빙 돌아갔네요.
- 현재 시간과 순서를 0으로 세팅, 시작 시간은 0이 아니라 -1로 해야 heappush를 할 때 시간의 비교가 제대로 됩니다
- 요청 시간 순으로 정렬해서 2번 조건을 맞출 수 있도록 세팅
jobs.sort() - 모든 작업을 끝내기 전까지(
i<len(jobs)) 반복하는 while문 세팅 - jobs의 j번째 작업을 현시점에 작업 큐에 넣을 수 있는 지 확인하고, 가능하다면 소요 시간을 기준으로 heappush
- 만약 q에 값이 들어가있다면(대기중인 큐가 있다면) 꺼내서 start를 현재 시간으로 설정, 현재 시간에는 큐에서 꺼낸 작업의 소요 시간을 추가, answer에는 (작업종료시점 - 요청 시점)을 더해서 총 걸린 시간을 계산합니다
- 대기중인 작업이 없다면 1초를 더해서 작업을 찾으러 가는걸 반복하면 됩니다
풀이 코드
import heapq
def solution(jobs):
# answer는 기본값이고 now와 i의 시작점은 0이니까 일단 지정
answer, now, i = 0, 0, 0
start = -1
q = []
# 요청 시간 순으로 정렬
jobs.sort()
while i < len(jobs):
for j in range(i, len(jobs)):
# 작업의 시작 시점이 현시점 이전이라면 넣음
if start < jobs[j][0] <= now:
# 소요시간(dur) 기준으로 (dur, 요청시간) 넣음
heapq.heappush(q, [jobs[j][1], jobs[j][0]])
elif jobs[j][0] > now:
break # 미래 작업이 나오면 중단
if q:
current_dur, current_start = heapq.heappop(q)
start = now
now += current_dur
# 반환 시간 = (작업 종료 시점 - 요청 시점)
answer += (now - current_start)
i += 1 # 처리한 작업 수 카운트
else:
# 지금 처리할 수 있는 작업이 없으면 다음 요청으로 이동
now += 1
return answer // len(jobs)반응형
'프로그래머스 - Python > 알고리즘 고득점 Kit' 카테고리의 다른 글
| [알고리즘 고득점 Kit] 소수 찾기 (0) | 2026.02.20 |
|---|---|
| [프로그래머스 LV.3] 베스트앨범 (0) | 2026.02.19 |
| [알고리즘 고득점 Kit] 그래프 - 가장 먼 노드 (0) | 2025.10.02 |
| 알고리즘 고득점 Kit - 그래프 - 순위 (3) | 2025.07.24 |
| 알고리즘 고득점 Kit - 여행경로(DFS) (2) | 2025.07.10 |