문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42891
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
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
def solution(food_times, k): | |
tot = len(food_times) | |
lst = sorted(food_times) | |
eat = 0 | |
for i in range(tot): | |
if k >= (lst[i]-eat)*(tot-i): # 해당 음식 다 먹을 수 있음 | |
k -= (lst[i]-eat)*(tot-i) # 먹고난 뒤 남은 시간 | |
eat = lst[i] | |
else: # 지금 음식 다 못 먹음 -> 정답이 있음 | |
remain = [idx for idx, f in enumerate(food_times) if f >= lst[i]] # 남은 음식들 모음 | |
k %= (tot-i) #남은 음식들 중 몇 번째 음식을 먹어야하나? | |
return remain[k]+1 | |
return -1 |
2019 KAKAO BLIND RECRUITMENT 기출 문제입니다. 간단하게는 최대 n*k번 돌면서 찾으면 되겠지만, 이렇게 풀면 효율성에서 점수를 가져가지 못 합니다.
대신 음식을 먹는데 걸리는 시간대로 정렬을 시켜놓고, 한 번에 현재 주어진 음식을 다 먹을 수 있는지 판단하면 됩니다. 다 못 먹는다면 해당 음식을 포함해서 남아있는 음식들 중 정답이 있다는 것이고, 모든 음식을 먹을 수 있어서 for문 바깥으로 빠져나가면 정전이 풀린 이후 남아있는 음식이 없으니 -1를 return해주면 됩니다.