[programmers] 최소직사각형 (java) -1level

2022. 2. 26. 11:37Algorithm/Programmers

문제 설명

 

 

문제 해결

 

문제를 읽고 처음에 가장 큰 수를 미리 구하고 그 큰 수를 고정시켜서 나머지 작은 수들을 가로와 세로를 나눠 비교하려고 했다.

이렇게 생각하니 너무 복잡하고 시간을 많이 소비하게 되었다.

 

쉽게 쉽게 생각하자. 왼쪽을 가로길이 , 오른쪽을 세로 길이라고 나눴을 때  가로에는 큰 수들을 넣고 세로에는 작은 수들을 넣어 놓자.

 

그리고 가로에서 가장 큰 수를 선택하고 세로에서 가장 큰 수를 선택하면 모든 길이를 만족하는 지갑을 만들 수 있다.

 

public class 최소직사각형 {
    public int solution(int[][] sizes) {
        int w = 0, h = 0; //가로 세로
        int max_w = 0 , max_h = 0;
        // 가로에다가 가장 큰수, 세로에다가 작은 수를 넣어
        for (int i = 0; i < sizes.length; i++){
            w = Math.max(sizes[i][0], sizes[i][1]);
            h = Math.min(sizes[i][0], sizes[i][1]);

            max_w = Math.max(max_w, w);
            max_h = Math.max(max_h, h);
        }

        return max_w * max_h;
    }
}

 

+ ) 다른 사람의 풀이

 

람다를 이용해 푼 사람도 있지만 이 정도가 가장 깔끔한 식이라고 생각한다.

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