※ 42891 무지의 먹방 라이브
https://school.programmers.co.kr/learn/courses/30/lessons/42891?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 해결 TIP
재귀함수와 if, for 문으로 구현하려 했지만 생각보다 까다로운 조건들이 많았다. 우선순위 큐를 활용하여 쉽게 구현할 수 있다. 시간이 적게 걸리는 음식부터 전체 시간 k에서 빼가며 순차적으로 계산해야 한다. 소요 시간과 음식 번호를 같이 저장하고 우선순위를 위해 heapq 모듈을 사용한다.
전체 코드
import heapq
def solution(food_times, k):
# 더 이상 먹을 음식이 없을때
if sum(food_times)<=k:
return -1
else:
q = []
for i in range(len(food_times)):
heapq.heappush(q,(food_times[i],i+1))
sum_value = 0
previous = 0
length = len(food_times)
# q = [(1, 2), (3, 1), (2, 3)]
# 가장 적게 걸리는 음식부터 빼면서 비교
while ((q[0][0] - previous)*length) <= k - sum_value:
now = heapq.heappop(q)[0]
sum_value += (now - previous)*length
length -= 1
previous = now
result = sorted(q,key=lambda x: x[1])
# result = [(3, 1)]
return result[(k-sum_value)%length][1] #먹어야 할 음식 번호 출력
'Python > 그리디' 카테고리의 다른 글
[Algorithm] 이코테 만들 수 없는 금액 | 파이썬 (그리디) (0) | 2024.06.24 |
---|---|
[Algorithm] 프로그래머스 체육복 | 파이썬 (그리디) (0) | 2024.06.24 |
[Algorithm] 백준 1931 회의실 배정 | 파이썬 (0) | 2024.06.20 |
[Algorithm] 백준 11047 동전 0 | 파이썬 (0) | 2024.06.20 |
[Algorithm] 백준 2839 설탕 배달 | 파이썬 (0) | 2024.06.20 |
댓글