알고리즘/프로그래머스

[프로그래머스 / Python] 더 맵게 | 초코더

cloud_nice 2020. 8. 29. 02:29

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

 

문제

스코빌지수 리스트가 주어지면 모든 스코빌지수를 K이상으로 만들어야함.

스코빌지수는 가장작은스코빌지수+(두번째로작은스코빌지수*2) 수식을 사용해서 K이상으로 만든다.

 

풀이

1. while문을 사용해서 가장작은 스코빌지수가 K보다 작을 경우 계속반복 

   1-1. 만약 스코빌지수가 1개 남았는데 그 1개가 K보다 작을경우 -1을 리턴

   1-2. 스코빌지수를 정렬하고 가장마지막수+두번째마지막수*2 를 append하고 cnt를 증가

 

전체코드

def solution(scoville,K):
    cnt=0

    while min(scoville)<K:
        if len(scoville)==1 and scoville[0]<K:
            return -1

        scoville=sorted(scoville,reverse=True)
        scoville.append(scoville.pop()+scoville.pop()*2)
        cnt+=1

    return cnt
print(solution([1, 2, 3, 9, 10, 12],7))

 

느낀점

시간초과가 나서 heapq를 사용한 코드를 다시 짜보겠습니다~~ 내일요...ㅎㅎ

 

+

수정코드

https://python.flowdas.com/library/heapq.html

 

heapq --- 힙 큐 알고리즘 — 파이썬 설명서 주석판

heapq --- 힙 큐 알고리즘 소스 코드: Lib/heapq.py 이 모듈은 우선순위 큐 알고리즘이라고도 하는 힙(heap) 큐 알고리즘의 구현을 제공합니다. 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 ��

python.flowdas.com

heapq를 사용하였고 시간초과를 해결했습니다! 코드는 거의 비슷하고 힙은 불변성을 유지하므로

while문 돌때마다 sort해주는 부분이 없어져도 되니깐 시간이 훨씬 줄어듭니다!!

힙(우선순위큐)은 위의 링크를 참고해주세요~

import heapq
def solution(scoville, K):
    cnt = 0

    #리스트를 힙으로 변환
    heapq.heapify(scoville)

    while scoville[0] < K:
        if len(scoville) == 1 and scoville[0] < K:
            return -1

        heapq.heappush(scoville, heapq.heappop(scoville) + (heapq.heappop(scoville) * 2))
        cnt+=1

    return cnt
print(solution([1, 2, 3, 9, 10, 12],7))