Search
Duplicate

무지의 먹방 라이브

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

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
Python
복사

출처

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