본문 바로가기

알고리즘/그리디

[프로그래머스] 최소직사각형 Lv1 JAVA [그리디][엄탱]

728x90

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

문제는 링크를 통해서 확인하면 된다.

요약하자면, 명함지갑을 만드는데 세로 가로가 제 각각 크기를 갖는 명함을 넣는 최소크기의 명함지갑을 만들 때 가로 곱하기 세로를 return해주면 된다.

단, 명함지갑에 넣는 명함의 방향은 가로가 길든 세로가 길든 들어가기만 하면 되는 것이다.

해설

문제 설명에서 요약으로 설명한것 처럼 명함을 지갑에 넣기만 하면 된다는 것이다.

그렇다면, 이 문제에서 가로 세로 개념을 지워버리고 길고 짧은 길이만 알면 된다.

명함의 길고 짧은 길이만 알고 나서, 명함지갑의 가로세로 최소 길이를 파악하면 된다.

조금 더 설명을 하자면, 지갑의 가장긴 길이 A와 짧은 길이B가 있다고 가정하고 명함의 가장 긴 길이a와 짧은 길이b가 있다고 가정하자.

그렇다면, A는 a보다 같거나 크면되고 B는 b보다 같거나 크면된다.

즉, A가 a보다 작을때, B가 b보다 작을때에만 A, B를 크기를 키워주면 된다.

코드

class Solution {
    public int solution(int[][] sizes) {
        int prevMax = 0;
        int prevMin = 0;
        
        for (int[] size: sizes) {
            int curMax = Math.max(size[0], size[1]);
            int curMin = Math.min(size[0], size[1]);
            
            prevMax = Math.max(curMax, prevMax);
            prevMin = Math.max(curMin, prevMin);
        }
        
        return prevMax * prevMin;
    }
}
728x90