위클리 챌린지
🔥최소직사각형 🔥
명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 한다.
가장 긴 가로 길이와 세로길이가 각각 80,70이기 때문에 80 x 70 크기의 지갑을 만들면 모든 명함을 수납할 수 있다.
하지만 2번 명함을 눕혀 수납한다면 80 x 50 크기의 지갑으로 모든 명함을 수납할 수 있다. 따라서 주어진 명합의 크기가 위와 같을 때 지갑의 크기는 4000이다.
모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어진다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return하는 solution을 완성해보자
sizes | return |
---|---|
[[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;
}
}
내가 푼 거 방법으로는 해결할 수 없는 걸까
항상 문제의 시작 포인트를 잘못 잡아서 헤매는 것 같다.
첫번째 풀이는 테스트 케이스 [[4, 5], [3, 4], [15, 18]] / 270 넣고 해보세요!!
그럼 오류가 보이실 거예요!!