2019 KAKAO BLIND RECRUITMENT_무지의 먹방 라이브.py

김규리·2021년 5월 31일
0

알고리즘 풀이

목록 보기
15/20
  1. [먹는데 걸리는 시간, 음식의 순서]을 같이 묶어서 (먹는데 걸리는 시간이 짧은 순으로)정렬
  2. 첫번째 순회 : k - n(*list[0]) 초가 지남
  3. 정렬을 통해서 가장 앞에 있던 음식은 다 먹음
  4. k가 0이 되기 전에 반복문을 종료
  5. 음식이 남은 것 중 음식 순서대로 정렬
  6. k로 나누고 나머지에서 방송 재개
def solution(food_times, k):
    answer = []
    food_list = []
    key = 0
    
    # 전체 음식을 먹는 시간보다 k가 크거나 같다면 -1
    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문이 종료되었기 때문.

0개의 댓글