본문 바로가기
언어

완전탐색

by 땅호720 2023. 12. 13.

나는 heapq을 이용하여 풀어봤다

우선순위 큐로 자동 정렬의 효과를 기대했는데, 결국 두 개의 힙을 큐를 사용하므로 이중 for문과 비슷한 성능을 보였다.

import heapq

def solution(sizes):
    # 큰쪽을 너비, 작은쪽을 높이
    # 내림차순, 역순으로 저장
    answer = 0
    weight_arr = []
    height_arr = []

    for size in sizes:
        heapq.heappush(weight_arr, -max(size))
        heapq.heappush(height_arr, -min(size))

    w = -heapq.heappop(weight_arr)
    h = -heapq.heappop(height_arr)

    answer = w*h

    return answer

heap을 이용한 결과

 

간단하게,

  1. a와 b 중 더 큰 수를 a로 swap하고
  2. a, b 각각을 weight, height과 비교하여 더 큰 값을 저장해나가는

방식이 한 번의 for문으로 더욱 간단하고 효율적인 결과가 나왔다.

def solution(sizes): 
    weight, height = 0, 0
    for a, b in sizes:
        if a < b:
            a, b = b, a    # swap
        weight = max(weight, a)
        height = max(height, b)
    return weight * height

위 코드 채점 결과

 

 

 

 

+) 아래와 같은 방식도 있지만, 이중 for문으로 돌리게 되므로 두 개의 우선순위 큐를 이용한 방식이랑 비슷하다

def solution(sizes):
    # for문 2번
    return max(max(x) for x in sizes) * max(min(x) for x in sizes)

위 코드 채점 결과

 

'언어' 카테고리의 다른 글

leetcode (1)  (1) 2023.12.15
'문자열 내 마음대로 정렬하기'  (0) 2023.12.13
join on 다중 조건 & cast type 실험  (0) 2023.12.13
list.count(n)  (0) 2023.12.12
WITH RECURSIVE  (0) 2023.12.12