SW개발/코딩테스트

[프로그래머스]8주차_최소직사각형 - 위클리 챌린지

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

 

코딩테스트 연습 - 8주차_최소직사각형

[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

programmers.co.kr

 

def solution(sizes):
    max_width = 0
    max_height = 0
    for card in sizes:
        # 큰 값을 한쪽으로 몰아 넣는 과정
        if card[0] < card[1]:
            card.reverse()
            
        # 큰 값을 갱신하는 부분
        max_width = max(max_width, card[0])
        max_height = max(max_height, card[1])
        
    # 큰 값 두개를 곱하면 가장 작은 지갑의 크기가 된다
    answer = max_width * max_height
    return answer

# 큰 값을 한쪽으로 몰아서 max를 구하는 것이 포인트

 

문제 해결 Point

해당 문제의 가장 중요한 포인트는 언제 명함을 돌려서 보관하는 것이 좋은가에 대한 해법이다.

가장 간단한 방법은, 가로와 세로길이를 비교해 큰 값을 한쪽으로 몰아 두는 방법이다.

 

원래의 명함

명함 번호 가로 길이 세로 길이
1 60 50
2 30 70
3 60 30
4 80 40

 

돌리고 난 후의 명함

명함 번호 가로 길이 세로 길이
1 60 50
2 70 30
3 60 30
4 80 40

위처럼 큰 값을 한쪽으로 몰아넣고 난 후에 각 카드에서 가장 큰 값끼리 곱하면 가장 작은 지갑의 크기를 구할 수 있다.

 

728x90