티스토리 뷰

프로그래머스 86491번 - 최소직사각형

프로그래머스 86491번 - https://programmers.co.kr/learn/courses/30/lessons/86491

 

요구사항

1. 주어진 명함을 모두 수납할 수 있는 가장 작은 지갑의 크기를 반환하여라.

2. 단, 명함은 지갑에 가로 또는 세로로 넣을 수 있다.

 

요구사항 분석 및  풀이과정

1. 명함을 가로 또는 세로로 넣을 수 있기 때문에, 명함의 가로길이 또는 세로 길이 중 작은 길이를 가로길이로, 긴 길이를 세로 길이로 한다.

 

명함을 돌릴 수 없었다면, 기존의 명함들의 가로길이 중 가장 긴 가로길이와, 세로 길이 중 가장 긴 세로 길이를 지갑의 크기로 만들면 된다.

하지만, 명함을 돌릴 수 있기 때문에 우리가 보는 시선 기준으로 가로의 길이와 세로의 길이가 자유롭게 바뀔 수 있다. 그러므로 둘 중 작은 것을 가로 또는 세로로 고정하여 구하는 것이다.

 

2. 1의 작업을 한 후, 명함의 가로길이 중 가장 긴 길이를 지갑의 가로길이로 한다.

3. 1의 작업을 한 후, 명함의 세로 길이 중 가장 긴 길이를 지갑의 세로 길이로 한다.

4. 2, 3에서 구한 두 길이를 곱하여 지갑의 크기를 구한다.

 

소스코드 작성

class Solution {
    
    public int solution(int[][] sizes) {
        int maxWidth = -1, maxHeight = -1;
        
        for(int[] size : sizes) {
            maxWidth = Math.max(Math.min(size[0], size[1]), maxWidth);
            maxHeight = Math.max(Math.max(size[0], size[1]), maxHeight);
        }

        return maxWidth * maxHeight;
    }
}

 

결과

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함