공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 2019 카카오 recruit - 무지의 먹방 라이브 (Level 3)

inspirit941 2020. 3. 25. 17:06
반응형

https://programmers.co.kr/learn/courses/30/lessons/42891

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코딩테스트를 처음 접했을 때, 난이도가 어려워서 좌절했던 첫 번째 문제.

 

1. 음식은 가장 적은 양이 가장 먼저 사라진다.

2. 하나의 음식이 완전히 사라지려면, 그 음식 크기만큼 원판이 회전해야 한다. = 원판 길이가 3이고 가장 적은 음식이 2라면, 2를 완전히 제거하기 위해서는 3*2 = 6의 시간이 필요하다.

3. 정전까지 남은 시간 동안 하나의 음식을 완전히 제거할 수 없는 경우, 원판 순서대로 음식을 섭취하다 정전되는 지점을 반환한다.

 

 

import heapq
def solution(food_times, k):
# (음식 크기, 원판에서의 위치) 로 food_times 재정의
food_times = [(food, idx) for idx, food in enumerate(food_times, 1)]
# heapify. 음식 크기가 작은 순으로 뽑아낸다.
heapq.heapify(food_times)
# 가장 크기 작은 음식
small_food = food_times[0][0]
prev_food = 0
# 작은 음식을 완전히 소비하기 위해 원판을 완주할 수 있는 경우
while k - ((small_food - prev_food) * len(food_times)) >= 0:
# 해당 음식을 완전히 소비하는 데 걸린 시간만큼 뺀다
k -= (small_food - prev_food) * len(food_times)
prev_food, index = heapq.heappop(food_times)
if not food_times:
return -1
small_food = food_times[0][0]
food_times = sorted(food_times, key = lambda x: x[1])
# print(food_times)
return food_times[k % len(food_times)][1]
반응형