[Python] 프로그래머스 / level 4 / 무지의 먹방 라이브 / heapq / 그리디
2024. 3. 29. 09:54ㆍCoding Test/Python
https://school.programmers.co.kr/learn/courses/30/lessons/42891
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
from collections import deque
def solution(food_times, k):
sec = 0
food_order = deque([idx, food] for idx, food in enumerate(food_times))
while food_order:
current = food_order.popleft()
if current[1]==0:
food_order.append(current)
continue
current[1] -=1
food_order.append(current)
sec += 1
if sec==k+1:
return current[0]+1
다음과 같이 큐로 풀 경우 시간초과로 테케 몇개는 실패한다.
그 이유는 나와 같이 풀게 되면 k번의 연산을 하게 되기 때문이다. -> 그리디로 풀어야 하는 이유
1) 이코테 풀이
import heapq
def solution(food_times, k):
if sum(food_times)<=k:
return -1
# 시간이 작은 음식부터 빼야 하므로 우선순위 큐를 이용
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) # 남은 음식의 개수
while sum_value + ((q[0][0]-previous) * length) <= k:
now = heapq.heappop(q)[0]
sum_value += (now-previous) * length
length -= 1
previous = now
result = sorted(q, key=lambda x:x[1]) # 음식의번호 기준으로 정렬
return result[(k-sum_value) % length][1]
역시나 아이디어는 똑같이 시간이 적게 걸리는 음식부터 제거해 나가는 방식 -> 우선순위 큐를 이용!
2)
https://www.youtube.com/watch?v=zpz8SMzwiHM
def solution(food_times, k):
answer = 0
length = len(food_times)
foods = []
for i in range(length):
foods.append((food_times[i], i+1))
foods.sort()
pretime = 0
for i, food in enumerate(foods):
diff = foods[0] - pretime
if diff != 0:
spend = diff*n
if spend<=k:
k -= spend
pretime = food[0]
else:
k%=n
result = sorted(foods[i:], key=lambda x:x[1])
return result[k][1]
n -= 1
return -1
모르겠다....다시 풀어봐야지
'Coding Test > Python' 카테고리의 다른 글
| [Python] 프로그래머스 / level 2 / 완전탐색 / 구현 / 소수찾기 / 리스트 내 모든 순열 구하기 (0) | 2024.04.04 |
|---|---|
| [Python] 프로그래머스 / level 1 / 체육복 / 그리디 / 반례 (1) | 2024.03.29 |
| [Python] 프로그래머스 / level 2 / 알고리즘 고득점 Kit / 프로세스 (0) | 2024.03.28 |
| [알고리즘] 코딩테스트 알고리즘 문제 / 프로그래머스 (0) | 2024.03.22 |
| [Python] 프로그래머스 / 알고리즘 고득점 Kit / hash 정리 / items() (0) | 2024.03.20 |