[프로그래머스] 최소직사각형

Yoon Han·2022년 9월 9일
0

알고리즘

목록 보기
1/2

최소직사각형 (Lv. 1)

풀이

Lv. 1 이라고 풀이가 바로 떠오를 줄 알았는데, 30분 정도 고민을 했다.

처음에 생각의 방향을 잘못 잡아서 이상한 포인트에서 헤맸다.

[[60, 50], [30, 70], [60, 30], [80, 40]] 요런 명함 input 값이 주어졌을 때,
1. 세로 사이즈가 가장 큰 명함을 하나씩 회전시켜간다(더 이상 회전 시킬 명함이 없을 때까지)
2. 그 때의 (최대 가로사이즈 * 최대 세로사이즈) 값이 문제에서 요구하는 지갑 크기의 최솟값이다.

여기에서 1번을 너무 어렵게 생각한게 문제 풀이의 장애물이었다. 그냥 명함을 하나씩 순회하면서 큰 수는 "가로 크기"로 취급, 작은 수는 "세로 크기"로 취급하여 새로운 배열을 만든 뒤에 각 배열의 최댓값을 서로 곱하면 답인것인데 매번 최대 세로 크기를 찾아내서 회전시키고.. 이럴 생각을 해서 생각이 막힌 것이다.

미리 전부 회전시켜 놓은 상태로 간주를 해버리면 문제는 아주 쉽게 풀린다.

def solution(sizes):
    largers = [] # 큰 수를 모아 놓을 배열
    smallers = [] # 작은 수를 모아 놓을 배열
    
    for width, height in sizes:
        larger = max(width, height)
        smaller = min(width, height)
        largers.append(larger)
        smallers.append(smaller)
        
    return max(largers) * max(smallers)
    
profile
챗바퀴는 도는 삶이 싫은 프론트엔드 엔지니어

0개의 댓글