[프로그래머스 / Python] 더 맵게 | 초코더
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))