본문 바로가기

[IT] 코딩테스트/[문제 및 풀이] 프로그래머스

[프로그래머스] 최소직사각형 / 자바(Java)

728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 


해설

가장 작은 명함지갑을 만드는 문제입니다.

가로, 세로를 맞춰 계산해 본다면 2의 10000제곱의 반복횟수를 가지게 되어 시간이 너무 오래걸립니다.

그래서 가로, 세로가 아닌 각 명함을 긴 면(B), 짧은 면(S)으로 정리한다면 긴 면들이 한 쪽으로 모여 가장 작은 지갑을 만들 수 있게됩니다.

 

sizes의 각 요소별  가로, 세로값을 Math.max, Max.min으로 긴 면, 짧은 면을 구하여 모든 명함이 들어가도록 기존의 것과 비교해 큰 것을 남겨 최종적으로 명함지갑의 가로, 세로길이가 되도록 합니다.

주의점

  • w, h는 최대 1000이므로 둘을 곱해도 int로 오류없이 계산가능하며 최소 1이므로 예상 못한 결과가 나오지 않는다.

코드

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