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

 

프로그래머스

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

programmers.co.kr

 

  • (heap[0][0] - previous)  * length : 현재 음식 먹는 시간 * 남은 음식 갯수 = 현재 음식을 다 먹는데 걸리는 시간 
  • heap[0][0] - previous : 현재 음식 먹는 시간을 구할 때 이전에 먹는데 걸린 시간을 빼줘야 함. 왜냐면 그만큼 시간이 흘렀으니까.
  • 이 부분 떠올리는게 어려웠음

 

import heapq
def solution(food_times, k):
    heap = []
    
    if sum(food_times) <= k:
        return -1
    
    for i in range(len(food_times)):
        heapq.heappush(heap, (food_times[i], i+1))
        
    sum_val = 0 # 먹기 위해 사용한 총 시간 
    previous = 0    # 직전에 먹는데 걸린 시간
    length = len(food_times)
    
    # 직전에 다 먹은 시간을 heap[0][0]에서 빼줘야 함. 
    # 왜냐면 그만큼 시간이 흘렀으니까.
    # 현재 음식 먹는 시간 * 남은 음식 갯수 = 현재 음식을 다 먹는데 걸리는 시간 
    while sum_val + ((heap[0][0] - previous)) * length <= k:
        now = heapq.heappop(heap)[0]
        sum_val += (now - previous) * length
        length -= 1 # 남은 음식 수 조정 
        previous = now 
        
    # result에는 남은 음식 배열만 담기게 됨 
    # index순으로 정렬 
    result = sorted(heap, key = lambda x : x[1])
    # 남은 음식 중에서 몇 번째 음식인지 확인하여 출력 
    return result[(k-sum_val)%length][1]

'◦ Algorithm > Python' 카테고리의 다른 글

백준 2xn 타일링 2 DP  (0) 2023.05.24
프로그래머스 두 큐 합 같게 하기  (0) 2023.05.22
백준 스타트와 링크 14889 완전탐색  (0) 2023.05.14
백준 퇴사 14501 DP  (0) 2023.05.14
백준 로봇 조종하기 2169 DP  (0) 2023.05.09

+ Recent posts