https://school.programmers.co.kr/learn/courses/30/lessons/42891
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- (heap[0][0] - previous) * length : 현재 음식 먹는 시간 * 남은 음식 갯수 = 현재 음식을 다 먹는데 걸리는 시간
- heap[0][0] - previous : 현재 음식 먹는 시간을 구할 때 이전에 먹는데 걸린 시간을 빼줘야 함. 왜냐면 그만큼 시간이 흘렀으니까.
- 이 부분 떠올리는게 어려웠음
import heapq
def solution(food_times, k):
heap = []
if sum(food_times) <= k:
return -1
for i in range(len(food_times)):
heapq.heappush(heap, (food_times[i], i+1))
sum_val = 0 # 먹기 위해 사용한 총 시간
previous = 0 # 직전에 먹는데 걸린 시간
length = len(food_times)
# 직전에 다 먹은 시간을 heap[0][0]에서 빼줘야 함.
# 왜냐면 그만큼 시간이 흘렀으니까.
# 현재 음식 먹는 시간 * 남은 음식 갯수 = 현재 음식을 다 먹는데 걸리는 시간
while sum_val + ((heap[0][0] - previous)) * length <= k:
now = heapq.heappop(heap)[0]
sum_val += (now - previous) * length
length -= 1 # 남은 음식 수 조정
previous = now
# result에는 남은 음식 배열만 담기게 됨
# index순으로 정렬
result = sorted(heap, key = lambda x : x[1])
# 남은 음식 중에서 몇 번째 음식인지 확인하여 출력
return result[(k-sum_val)%length][1]
'◦ Algorithm > Python' 카테고리의 다른 글
백준 2xn 타일링 2 DP (0) | 2023.05.24 |
---|---|
프로그래머스 두 큐 합 같게 하기 (0) | 2023.05.22 |
백준 스타트와 링크 14889 완전탐색 (0) | 2023.05.14 |
백준 퇴사 14501 DP (0) | 2023.05.14 |
백준 로봇 조종하기 2169 DP (0) | 2023.05.09 |