티스토리 뷰

반응형

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

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

 


⊙ 문제

⊙ 제한사항

⊙ 입출력 예

⊙ 입출력 예 설명

 


 

⊙ 문제 접근 과정

 

첫 번째로 작은 값과 두 번째로 작은 값*2을 더하여 K이상으로 변경해야 한다. 배열에서 작은 값을 찾기 위해

힙큐를 이용하여 문제를 풀었다.

 

가장 먼저 scoville 배열을 heapq의 heapify 함수를 이용하여 힙큐로 변경해준다.

그리고 pop을 해준다. 가장 작은 값이 pop된다.

그리고 또 pop을 해준다. 두 번째로 작은 값이 pop 된다. 이 값에는 2를 곱해준다.

 

두 값을 더해주어 다시 scoville에 추가해준다.

 

계속 반복해준다. 제일 작은 값이 K보다 커지거나 같을 때까지.

 

 


 

⊙ 문제 풀이

 

import heapq

def solution(scoville, K):
    heapq.heapify(scoville)
    minCnt = 0
    while scoville[0]<K and len(scoville)>1:
        mix = heapq.heappop(scoville)+(heapq.heappop(scoville)*2)
        heapq.heappush(scoville,mix)
        minCnt+=1
    return minCnt if scoville[0]>=K else -1

⊙ 마무리

 

 

힙큐가 유용하다.

heapify를 사용하면 배열을 힙큐로 손쉽게 변경할 수 있다.

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함