[프로그래머스 Lv1] 최소직사각형(python)

문제

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

나의 코드 (힌트 참조)

"""
1. 아이디어
명함을 세울수도, 눕힐수도 있기 때문에 가로, 세로는 언제든지 바뀔 수 있다.
그렇기 때문에 가로, 세로 중 한개를 임의로 정해서 한 곳에는 최댓값을 한 곳에는 최솟값을 집어 넣으면
그게 지갑안에 명함을 모두 집어넣을 수 있는 크기중에 최소 넓이의 지갑이 된다.

2. 시간복잡도
반복문 내에서는 비교 연산자 밖에 없기 때문에 O(n)이다.
"""

def solution(sizes):
    
    max_w, max_h = 0, 0
    
    for i in range(len(sizes)):
        
        if sizes[i][0] < sizes[i][1]:
            sizes[i][0], sizes[i][1] = sizes[i][1], sizes[i][0]
  
    for w, h in sizes:
        
        if w > max_w:
            max_w = w
        if h > max_h:
            max_h = h
            
    return max_w * max_h

다른 사람의 코드

"""
숏코딩 중에 가장 직관적이면서 깔끔한거 같다.
sizes를 순회하면서 최댓값의 최댓값, 최솟값의 최댓값을 구하면 해결 된다.
"""

def solution(sizes):
    return max(max(x) for x in sizes) * max(min(x) for x in sizes)
    

느낀점

sizes의 범위가 1이상 10000이하 이기 때문에 완전탐색으로 풀기에는 무리가 있다.
알고리즘 보단 아이디어가 중요한 문제이다.

좋은 웹페이지 즐겨찾기