본문 바로가기

코딩테스트/Programmers

[JAVA] 최소 직사각형

< 내 풀이 >

import java.util.*;
class Solution {
    public int solution(int[][] sizes) {
        int min_arr[]=new int[sizes.length];
        int max_arr[]=new int[sizes.length];
        
        for(int i=0;i<sizes.length;i++){
            int num=sizes[i][0];
            int max=num;
            int min=num;
            
            for(int j=0;j<sizes[i].length;j++){
                max=Math.max(num,sizes[i][j]);
                min=Math.min(num,sizes[i][j]);
            }
            max_arr[i]=max;
            min_arr[i]=min;
        }
        Arrays.sort(max_arr);
        Arrays.sort(min_arr);
        
        int answer = max_arr[max_arr.length-1]*min_arr[min_arr.length-1];
        return answer;
    }
}

 

✏️ 풀이 과정

 

ex) sizes= [[60,50] , [30,70], [60,30], [80,40]] 일 때 

각 배열에서 작은 값은 min_arr에 저장하고, 큰 값은 max_arr에 저장한다. 

min_arr에서 가장 큰 값과 max_arr에서 가장 큰 값을 곱한 것이 곧 가장 작은 지갑의 크기가 된다. 

 

< 다른 사람의 풀이 >

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;
    }
}

 

➡️ for-each문을 사용하면 훨씬 간단하고 깔끔하게 문제를 풀 수 있다. 

 

✍🏻 느낀점

 

처음에 명함들을 적절히 회전시킨다고 해서, 뭔가 어렵게 생각했던 것 같다. 생각해보니 별 거 아닌 문제였다. 하지만 2차원 배열을 다루는 과정에서 너무 지저분하게 풀지 않았나싶다. 다른 사람들의 풀이를 보고 for-each문을 사용하면 훨씬 깔끔하게 풀 수 있다는 것을 알게 되었으니 앞으로는 이를 잘 활용해야겠다. 

'코딩테스트 > Programmers' 카테고리의 다른 글

[JAVA] 햄버거 만들기  (0) 2024.05.07
[JAVA] 모의고사  (0) 2024.05.01
[JAVA] n^2 배열 자르기  (0) 2024.05.01
[JAVA] 괄호 회전하기  (0) 2024.04.30
[JAVA] 연속 부분 수열 합의 개수  (0) 2024.04.30