티스토리 뷰

1. 문제

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

2. 소스코드 (Python3)

import heapq

 

def solution(scoville, K):

    answer = 0

    scoville = [s for s in scoville]

    heapq.heapify(scoville)

   

    while True:

        tmp1 = heapq.heappop(scoville)

        if tmp1 >= K: break

        if not scoville: return -1

        tmp2 = heapq.heappop(scoville)

        heapq.heappush(scoville, tmp1 + 2*tmp2)

        answer += 1   

   

    return answer

 

3. 고찰

1) 시간 복잡도

<힙 연산 시간복잡도>

- 구성 heapify : O(N log N)

- 삽입 insert : O(log N)

- 삭제 remove : O(log N)

 

<소스코드 시간복잡도>

heapify -> O(N log N)

while loop -> 최대 N-1번 반복

    힙 insert 두 번 -> O(2*log N)

    힙 remove 한 번 -> O(log N)

따라서 위 소스코드의 시간 복잡도는 O(N log N)이다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/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
글 보관함