hoon's bLog

Java 프로그래머스 최소 직사각형 자바 본문

코딩테스트/프로그래머스

Java 프로그래머스 최소 직사각형 자바

개발한기발자 2022. 6. 14. 08:56
반응형

문제출처 : https://programmers.co.kr/learn/courses/30/lessons/86491

 

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

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


[나의 풀이]

- 입력받은 배열을 받아 가로(x), 세로(y)로 분리하여 최대값을 저장

class Solution {
    public int solution(int[][] size) {
        int answer = 0;
        int sizeL = size.length;
        //가로쪽에 긴 길이 몰아주기
        int[] x = new int[sizeL];    //큰수 저장할 배열
        int[] y = new int[sizeL];    //작은수 저장할 배열

        int tmp1 = 0;       //큰 수중의 최대값 저장할 변수
        int tmp2 = 0;       //작은 수중의 최대값 저장할 변수

        for(int i=0; i < sizeL ;i++){
            int j = 0;
            x[i] = (size[i][j] < size[i][j+1]) ? size[i][j+1] : size[i][j];
            y[i] = (size[i][j] < size[i][j+1]) ? size[i][j] : size[i][j+1];

            tmp1 = tmp1 <= x[i] ? x[i] : tmp1;
            tmp2 = tmp2 <= y[i] ? y[i] : tmp2;
        }

        answer = tmp1 * tmp2;
        return answer;
    }
}

 

[다른사람의 풀이-1]

class Solution {
    public int solution(int[][] sizes) {
        // sizes 배열을 받아서 stream 객체 생성 후,
        // 람다식을 통해 a,b int[] 변수에 stream 객체의
        // 최대값 중에 최대값, 최소값 중에 최대값을 저장하여
        // it 변수에 곱한 값을 가져와서 return
        return Arrays.stream(sizes).reduce((a, b) -> new int[]{
                Math.max(Math.max(a[0], a[1]), Math.max(b[0], b[1])),
                Math.max(Math.min(a[0], a[1]), Math.min(b[0], b[1]))
        }).map(it -> it[0] * it[1]).get();
    }
}

 

[다른사람의 풀이-2]

class Solution {
    public int solution(int[][] sizes) {
        int length = 0, height = 0;
        //for-each로 sizes 배열의 값을 card 변수에 담아
        //너비(length), 높이(height)의 최대값을 가져옴
        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;
    }
}

 

[정리]

- 2차원배열의 데이터를 for-each 객체로 풀어서 가져와 1차원 배열에 넣을 경우,

  선언함에 따라 2차원배열의 값이 1차원의 배열이 된다?!?

  ex). input : sizes[][] = new int[][]{{60, 50}, {60, 70}, {60, 30}, {80, 40}}

  -> for-each로 int[] card = {60, 50}, int[] card = {60, 70}...

  이런식으로 2차원배열의 index인 [0][0]=60,[0][1]=50 ...... 요소가 하나의 1차원 배열이 된다!!

- 배열의 데이터 처리 방식최대값/최소값을 다루는게 이 문제에 핵심이였던것 같다!

 

개인피셜 난이도 : ★★☆☆☆(난이도가 낮을 때를 행복해하자ㅠㅠ)

역시나 stream을 이용한다던지,

max, min함수 활용을 통해 변수를 최소화 할 수 있었다.

다른 분들의 코딩 방식을 나름 이해하기 쉽게 설명 해봤는데

나만 알아볼 수 있는건 아닌지 모르겠다....

 

혹시나 잘못된 부분이나 더 멋지게 설명 가능하신 분은 지적 부탁드립니다!!(--)(__)

 

끝!

728x90
반응형