CS/Algorithm 문제

[Programmers] 더 맵게

[Programmers] 더 맵게

 

🎈문제

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

💬설명

  • 처음에는 PriorityQueue로 풀었는데 시간초과가 나서 heapq를 이용해 풀었다. 둘다 push pop이 O(logn)인걸로 알고 있는데 의문이었다.
  • 찾아보니까 PriorityQueue는 heapq의 함수들을 이용해서 만들어졌지만 thread-safe한 대신 속도가 느리다고 한다. (참고)
  • heapq로 우선순위 고려해서 풀어준다.

👩‍💻코드

# 시간 초과 코드


from queue import PriorityQueue


def solution(scoville, K):
    answer = 0
    pq = PriorityQueue()
    
    # priority queue에 모든 스코빌 지수 넣기
    for i in scoville:
        pq.put(i)
        
    # 스코빌 지수가 가장 작은 값이 K이상이 될때까지 반복
    while True:
        first = pq.get()
        if first >= K or not pq:
            return answer
        second = pq.get()
        # 가장 작은 값 둘다 0인경우 불가능
        if first == 0 and second == 0:
            return -1
        pq.put(first + second * 2)
        answer += 1
    
    return -1
# 정답코드


import heapq


def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)
        
    # 스코빌 지수가 가장 작은 값이 K이상이 될때까지 반복
    while scoville[0] < K:
        first = heapq.heappop(scoville)
        second = heapq.heappop(scoville)
        heapq.heappush(scoville, first + second * 2)
        answer += 1
        if len(scoville) == 1 and scoville[0] < K:
            return -1
    
    return answer
728x90
반응형

'CS > Algorithm 문제' 카테고리의 다른 글

[BaekJoon] 백준 2170 선 긋기  (0) 2021.10.11
[BaekJoon] 백준 21609번 상어중학교  (0) 2021.10.08
[Programmers] 주식가격  (0) 2021.10.07
[Programmers] 다리를 지나는 트럭  (0) 2021.10.07
[Programmers] 프린터  (0) 2021.10.07