title: "[프로그래머스] 무지의 먹방 라이브 Python 파이썬 해설 (Level 4) - 이도훈"
cleanUrl: "programmers/42891"
description: "프로그래머스 Level 4 문제 [무지의 먹방 라이브]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def solution(food_times, k):
    if k >= sum(food_times):
        return -1
    
    food_times = [(t, i) for i, t in enumerate(food_times, 1)]
    food_times.sort()
    
    # 포인터 i를 관리합니다.
    i = 0
    # 남아있는 음식의 개수를 관리합니다.
    remaining = len(food_times)
    curr = 0
    while k >= 0:

        # 현재까지 가장 적게 남은 음식을 다 먹기 위해 "더 돌아야 하는"
        # 사이클 수입니다.
        ncycle = food_times[i][0] - curr
        # 현재 food_time 값도 관리합니다.
        curr = food_times[i][0]
        
        if k == 0:
            tmp = food_times[i:]
            tmp.sort(key=lambda x: x[1])
            return tmp[0][1]
        
        # 남은 음식의 수 * 사이클 수 만큼 k를 소모합니다.
        if k >= remaining * ncycle:
            k -= remaining * ncycle
        # 만약 남은 k를 가지고 사이클을 다 못 돌면,
        # 1사이클 씩에 remaining개 돌고, r개가 남았을 때
        # r번째 음식이 정답입니다.
        else:
            r = k % remaining
            
            tmp = food_times[i:]
            tmp.sort(key=lambda x: x[1])
            return tmp[r][1]

        # 다음으로 적게 남은 음식을 탐색합니다.
        while i < len(food_times) and food_times[i][0] == curr:
            i += 1
            remaining -= 1

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges