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


코딩테스트를 처음 접했을 때, 난이도가 어려워서 좌절했던 첫 번째 문제.
1. 음식은 가장 적은 양이 가장 먼저 사라진다.
2. 하나의 음식이 완전히 사라지려면, 그 음식 크기만큼 원판이 회전해야 한다. = 원판 길이가 3이고 가장 적은 음식이 2라면, 2를 완전히 제거하기 위해서는 3*2 = 6의 시간이 필요하다.
3. 정전까지 남은 시간 동안 하나의 음식을 완전히 제거할 수 없는 경우, 원판 순서대로 음식을 섭취하다 정전되는 지점을 반환한다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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] | |
반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 백준 2178. 미로 탐색 (0) | 2020.03.31 |
---|---|
[Python] 백준 1759. 암호 만들기 (0) | 2020.03.26 |
[Python] 프로그래머스. 2018 카카오 recruit - 캐시 (Level 2) (0) | 2020.03.24 |
[Python] 백준 16236. 아기 상어 (0) | 2020.03.23 |
[Python] 구름. 공연 좌석 (0) | 2020.03.19 |