-
[프로그래머스 / Python] 더 맵게 | 초코더알고리즘/프로그래머스 2020. 8. 29. 02:29
https://programmers.co.kr/learn/courses/30/lessons/42626
문제
스코빌지수 리스트가 주어지면 모든 스코빌지수를 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를 사용하였고 시간초과를 해결했습니다! 코드는 거의 비슷하고 힙은 불변성을 유지하므로
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))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Python] 다리를 지나는 트럭 | 초코더 (0) 2020.08.21 [프로그래머스 / Python] 위장 | 초코더 (0) 2020.08.21 [프로그래머스 / Python] 전화번호 목록 | 초코더 (0) 2020.08.19 [프로그래머스 / Python] 기능개발 | 초코더 (0) 2020.08.18 [프로그래머스 / Python] 주식가격 | 초코더 (0) 2020.08.18