일단, 효율성 테스트에서 k의 값이 20조이하가 주어집니다. 여기서 생각할 수 있는 것은 절대 완전탐색으로는 효율성 테스트를 통과할 수 없다 입니다. 저도 완전탐색으로 처음에 쉽게 접근했다가 효율성 테스트에서 무릎을 꿇었습니다.
우선 순위 큐를 이용하여 문제를 접근하면 시간을 단축시킬 수 있습니다. 하지만 계산하는 과정이 꽤나 복잡하므로 직접 해보시며 식을 찾는 것을 권장합니다.
import heapq
def solution(food_times, k):
answer = 0
time = 0
pq = []
answer_rs = []
# 1. 우선순위 큐에 (food_times, 음식 번호) 순으로 담는다.
for i in range(len(food_times)):
heapq.heappush(pq, [food_times[i], i + 1])
pre_food = 0
flag = True
while flag:
if not pq:
return -1
length = len(pq)
time += (pq[0][0] - pre_food) * length
if time > k:
time -= (pq[0][0] - pre_food) * length
while pq:
answer_rs.append(heapq.heappop(pq)[1])
answer_rs.sort()
answer = answer_rs[(k - time) % length]
flag = False
else:
pre_food = heapq.heappop(pq)[0]
return answer