Language/JAVA

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

paran21 2022. 1. 19. 15:40

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

이중배열 문제이다.

이중배열에서 원하는 값을 어떻게 꺼낼지, max를 어떻게 구할지에서 많이 헤맸다.

명함의 크기를 조정한다는 부분을 처음에 엄청 복잡하게 생각했었는데, 가로가 세로보다 큰 값으로 모두 통일하면 간단히 해결할 수 있는 문제였다.

class Solution {
    public int solution(int[][] sizes) {
        //가로 세로 중 가로에 큰 값이 오도록 조정
        for (int i = 0; i < sizes.length; i++) {
            if (sizes[i][0] < sizes[i][1]) {
                int a = sizes[i][0];
                int b = sizes[i][1];
                sizes[i][0] = b;
                sizes[i][1] = a;
            }
        }
        //가로 중 가장 큰 값, 세로 중 가장 큰 값이 넣음
        int max1 = sizes[0][0];
        int max2 = sizes[0][1];
        for (int i = 0; i < sizes.length; i++) {
            if (sizes[i][0] > max1) {
                max1 = sizes[i][0];
            }
            if (sizes[i][1] > max2) {
                max2 = sizes[i][1];
            }
        }
        int answer = max1 * max2;

        return answer;
    }
}

다른 사람의 답을 참고하면, 이중배열의 경우 for each문을 사용해서 간단히 꺼낼 수 있다.

특히 이 경우 이중배열 안의 배열 크기는 2로 고정된 경우라 [0], [1]만 사용하면 된다.


        for (int[] size : sizes) {
            int paramMax = Math.max(size[0], size[1]);
            int paramMin = Math.min(size[0], size[1]);
        }

그리고 두 값 중 최대값과 최소값을 구하는 Math.max와 Math.min을 활용하면 비교적 간단히 끝낼 수 있다.

아래와 같이 for each문 + Math.max와 Math.min을 중첩해서 사용하면 코드를 줄일 수 있다.

for (int[] card : sizes) {
            length = Math.max(length, Math.max(card[0], card[1]));
            height = Math.max(height, Math.min(card[0], card[1]));
        }

'Language > JAVA' 카테고리의 다른 글

#최소값, 최대값 구하기  (0) 2022.01.19
#Stream  (0) 2022.01.19
[프로그래머스] 3진법 뒤집기  (0) 2022.01.19
[프로그래머스] 하샤드 수  (0) 2022.01.19
[프로그래머스] 콜라츠 추측  (0) 2022.01.19