- [먹는데 걸리는 시간, 음식의 순서]을 같이 묶어서 (먹는데 걸리는 시간이 짧은 순으로)정렬
- 첫번째 순회 : k - n(*list[0]) 초가 지남
- 정렬을 통해서 가장 앞에 있던 음식은 다 먹음
- k가 0이 되기 전에 반복문을 종료
- 음식이 남은 것 중 음식 순서대로 정렬
- k로 나누고 나머지에서 방송 재개
def solution(food_times, k):
answer = []
food_list = []
key = 0
if sum(food_times) <= k:
return -1
for i in range(len(food_times)):
food_list.append([i, food_times[i]])
food_list = sorted(food_list, key=lambda x:x[1])
k -= food_list[0][1] * len(food_list)
i = 0
eat = 0
while True:
if k-eat < 0:
break
k -= eat
i+=1
eat = (food_list[i][1] - food_list[i-1][1]) * (len(food_list)-i)
food_list = sorted(food_list[i:], key = lambda x:x[0])
return food_list[k%len(food_list)][0]+1
주의사항
- while문에 k가 음수가 되고 종료되지 않도록 주의.
- 다 먹은 음식은 제외되도록 반복이 돌기 때문에
len(food_list) - i
와 같이 제외하고 코드를 작성.
food_list[i][1] - food_list[i-1][1]
을 해주는 이유는 i-1까지먹었기 때문에 제외하고 k의 값을 줄이기 위해서. (이렇게 하므로 food_list의 값을 업데이트하지 않고 food_list에서 먹은 것을 제외하고 값을 계산할 수 있음.)
sorted(food_list[i:])
을 하는 이유는 i-1 번째까지는 음식을 먹고 while문이 종료되었기 때문.