본문 바로가기
알고리즘/프로그래머스

더 맵게 level2

by 매화of사군자 2021. 7. 24.

문제를 읽은 후 생각

- queue나 heap을 써야겠다.

- 어떤 음식들을 섞어야 가장 적은 횟수로 정답을 도출할 수 있을까?

ex) K가 3, 음식 배열이 [1, 2, 5, 6] 이면 1과 2 음식을 섞어 1번이 최소가 된다.

ex) K가 7, 음식 배열이 [1, 2, 9, 10]이면 1과 2를 섞은 후 그 결과인 5와 9를 섞는다. 총 2번임

다른 방법으로는 1과 10을 섞고 2와 9를 섞으면 된다. 이것도 총 2번임

 

2가지 방법을 정리하면 첫 번째 방법은 가장 안 매운 음식 2가지를 섞는 방식이고 두 번째 방법은 가장 안 매운 음식과 가장 매운 음식을 섞는 방법인데 두 번째 방법으로 하면 첫 번째 예시 또한 2번이란 결과가 나오게 된다. 그러므로 첫 번째 방법으로 문제를 풀기로 하였다.

 

가장 안 매운 음식을 자동?으로 가져오기 위해 heap을 사용하였다.

 

코드

더보기

import heapq

def solution(scoville, K):
    cnt = 0
    heap = []
    
    for i in scoville:
        heapq.heappush(heap, i)
    
    while heap[0] <= K and len(heap) != 1:
        a, b = heapq.heappop(heap), heapq.heappop(heap)
        tmp = a + (b * 2)
        cnt += 1
        heapq.heappush(heap, tmp)
    
    if heap[0] < K:
        return -1
    return cnt

 

고찰

- 난 항상 while이나 for loop을 쓴 후 마지막에 조건문을 하나 더 사용하는 것 같다. 이게 더 쉽다고 생각하는 듯...

- while문 안에서 처리하는 방법을 생각해보면 현재 나의 코드의 while문 조건을 while문 안에서 확인하고 while True로 하면 될 것 같다.

 

ex)

    while True:
        a = heap.heappop(heap)
        if a >= K:
        	break
        if len(heap) == 0:
        	return -1
        cnt += 1
        b = heap.heappop(heap)
        tmp = a + (b * 2)
        heapq.heappush(heap, tmp)

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

124 나라의 숫자 level2  (0) 2021.07.24
오픈채팅방 level2  (0) 2021.07.23
기능개발 - level2  (0) 2021.07.21
짝지어 제거하기  (0) 2021.07.20
[1차] 다트 게임 (파이썬)  (0) 2021.07.14

댓글