https://programmers.co.kr/learn/courses/30/lessons/42891
<입출력 예>
food_times : [3, 1, 2]
k : 5
result : 1
<입출력 예 설명>
0~1초 동안에 1번 음식을 섭취한다. 남은 시간은 [2,1,2] 이다.
1~2초 동안 2번 음식을 섭취한다. 남은 시간은 [2,0,2] 이다.
2~3초 동안 3번 음식을 섭취한다. 남은 시간은 [2,0,1] 이다.
3~4초 동안 1번 음식을 섭취한다. 남은 시간은 [1,0,1] 이다.
4~5초 동안 (2번 음식은 다 먹었으므로) 3번 음식을 섭취한다. 남은 시간은 [1,0,0] 이다.
5초에서 네트워크 장애가 발생했다. 1번 음식을 섭취해야 할 때 중단되었으므로, 장애 복구 후에 1번 음식부터 다시 먹기 시작하면 된다.
def solution(food_times, k):
answer = 0
temp = 0
while True:
for i in range(len(food_times)):
if temp == k:
answer = i+1
break
if food_times[i] > 0:
temp += 1
food_times[i] -= 1
if (sum(food_times) == 0) or (answer > 0):
break
if answer == 0:
answer = -1
return answer
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]
def solution(ft, k):
answer = 0
while k > 0 :
a = k // (len(ft) - ft.count(0) )
b = k % (len(ft) - ft.count(0) )
for i, j in zip(ft, range(len(ft))):
if ft[j] != 0:
ft[j] = i - a
if ft[j] < 0:
b = b + abs(ft[j])
ft[j] = 0
k = b
if len(ft) - ft.count(0) ==0:
return -1
if k+1 <= len(ft) - ft.count(0):
for i in ft:
answer += 1
if i !=0 :
k -= 1
if k == -1:
return answer
...