[JAVA] 최소직사각형

NoHae·2025년 1월 13일
1

문제 출처

코딩테스트 연습 > 완전탐색 > 최소직사각형
https://school.programmers.co.kr/learn/courses/30/lessons/86491

문제 설명

명함의 가로,세로가 있는 2차원 배열 sizes가 있을 때, 모든 명함을 수납할 수 있는 가장 작은 지갑을 return 하라.

접근 방법

문제 내용중

가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.

부분이 있다.
해당 부분은 가로 길이와, 세로 길이를 바꿀 수 있다는 의미로 해석할 수 있다. 이를 통해, 만약 세로가 가로보다 길다면 해당 배열의 두 요소를 바꿔준 뒤, 각각 세로의 max, 가로의 max를 찾으면 된다.

class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        int W_max = 0;
        int H_max = 0;
        
        for(int[] s : sizes){
            if(s[0] <s[1]){
                int temp = s[0];
                s[0] = s[1];
                s[1] = temp;
            }
            if(W_max <= s[0]){
                W_max = s[0];
            }
            if(H_max <= s[1]){
                H_max = s[1];
            }
        }
        System.out.println(W_max);
        System.out.println(H_max);
        answer = W_max * H_max;
        return answer;
    }
}

알게된 점

가로와 세로를 바꿔도 된다는 것만 주의하면 아주 쉬운 문제이다.
처음에 그 부분을 제대로 보지 않고 풀었다가, 다시 풀었다.

문제를 읽을 때 주의하면서 읽어야겠다.(쉬운 문제도)

문제푼 흔적

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글