본문 바로가기

문제 풀이/Programmers

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

문제 출처 - Programmers

문제는 여기

 

코딩테스트 연습 - 최소직사각형

[[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


[풀이]

1. 명함의 크기를 비교해가면서 긴 변을 가로, 짧은 변을 세로로 둔다.

2. 모든 가로와 세로를 비교해 가장 큰 가로와 세로를 구해준다.

3. 2. 에서 구해진 가로와 세로의 곱을 구해 리턴해준다.

[접근]

1. 명함의 사이즈 중 긴 것을 가로, 짧은 것을 세로로 두고(명함을 회전시키기) 가장 큰 가로와 세로를 통해 면적을 구하면 되겠다고 생각하였다.

2. 모든 명함을 담기 위해서는 모든 명함의 가로 길이 중 가장 긴 것과 모든 명함의 세로 길이 중 가장 긴 것의 크기가 되면 된다.

[코드]

class Solution {
    public int solution(int[][] sizes) {
        int row = 0;
        int col = 0;
        
        for (int i = 0; i < sizes.length; i++) {
            // 가로와 세로를 비교해 긴 것을 가로, 짧은 것을 세로로 지정
            int x = Math.max(sizes[i][0], sizes[i][1]);
            int y = Math.min(sizes[i][0], sizes[i][1]);
            
            // 가로 길이 중 더 큰 것을 사용
            row = Math.max(row, x);
            // 세로 길이 중 더 큰 것을 사용
            col = Math.max(col, y);
        }
        
        // 가장 긴 가로와 세로를 사용해 곱으로 넓이를 구해주기
        return row * col;
    }
}