최소 직사각형_Java

컴투루·2022년 6월 29일
0

프로그래머스 Lv.1

목록 보기
26/38

위클리 챌린지

🔥최소직사각형 🔥


👀 문제

명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 한다.

가장 긴 가로 길이와 세로길이가 각각 80,70이기 때문에 80 x 70 크기의 지갑을 만들면 모든 명함을 수납할 수 있다.
하지만 2번 명함을 눕혀 수납한다면 80 x 50 크기의 지갑으로 모든 명함을 수납할 수 있다. 따라서 주어진 명합의 크기가 위와 같을 때 지갑의 크기는 4000이다.

모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어진다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return하는 solution을 완성해보자


✔️ 조건

  • sizes의 길이는 1 이상 10,000 이하입니다.
    - sizes의 원소는 [w, h] 형식입니다.
    - w는 명함의 가로 길이를 나타냅니다.
    - h는 명함의 세로 길이를 나타냅니다.
    - w와 h는 1 이상 1,000 이하인 자연수입니다.

👩‍💻 입력 & 🧙 출력

sizesreturn
[[60, 50], [30, 70], [60, 30], [80, 40]]4000
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]]120
[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]]133

🙋‍♀️ 첫번째 풀이

import java.util.*;

class Solution {
    public int solution(int[][] sizes) {
        
        List<Integer>list = new ArrayList<Integer>();
        
        for(int i=0;i<sizes.length;i++){
            for(int j=0;j<sizes[i].length;j++){            
                list.add(sizes[i][j]);
            }
        }
        list.sort(Comparator.naturalOrder());
        
 
        
        int answer = list.get(list.size()/2-1) * list.get(list.size()-1);
        
 
        
        return answer;
    }
}

첫번째로 문제를 해결했는데 제출하고나니 오류가 발생했다.
왜 오류가 나는 건지 누가 알려주면 좋겠다.

🙋‍♀️ 두번째 풀이

import java.util.*;

class Solution {
    public int solution(int[][] sizes) {
        int answer = 0;
        
        List<Integer> wlist = new ArrayList<Integer>();
        List<Integer> hlist = new ArrayList<Integer>();
        
        for(int i=0;i<sizes.length;i++){
            int n1 = sizes[i][0];
            int n2 = sizes[i][1];
            
            wlist.add(Math.max(n1,n2));
            hlist.add(Math.min(n1,n2));
        }

        answer = Collections.max(wlist) * Collections.max(hlist);
     
        return answer;
    }
}
  1. sizes의 i번째의 0번째와 1번째의 값을 비교해서 큰값을 wlist에 작은 값을 hlist에 add 한다.
  2. Collections의 max를 통해 큰 수 중에 가장 큰 수 와 작은 수 중에 가장 큰수의 곱을 answer에 대입해서 return 해준다.

👏 마무리

내가 푼 거 방법으로는 해결할 수 없는 걸까

항상 문제의 시작 포인트를 잘못 잡아서 헤매는 것 같다.

profile
맘 먹으면 못할 게 없지

1개의 댓글

comment-user-thumbnail
2022년 7월 4일

첫번째 풀이는 테스트 케이스 [[4, 5], [3, 4], [15, 18]] / 270 넣고 해보세요!!
그럼 오류가 보이실 거예요!!

답글 달기