[programmers] 최소직사각형 (java) -1level
2022. 2. 26. 11:37ㆍAlgorithm/Programmers
문제 설명
문제 해결
문제를 읽고 처음에 가장 큰 수를 미리 구하고 그 큰 수를 고정시켜서 나머지 작은 수들을 가로와 세로를 나눠 비교하려고 했다.
이렇게 생각하니 너무 복잡하고 시간을 많이 소비하게 되었다.
쉽게 쉽게 생각하자. 왼쪽을 가로길이 , 오른쪽을 세로 길이라고 나눴을 때 가로에는 큰 수들을 넣고 세로에는 작은 수들을 넣어 놓자.
그리고 가로에서 가장 큰 수를 선택하고 세로에서 가장 큰 수를 선택하면 모든 길이를 만족하는 지갑을 만들 수 있다.
public class 최소직사각형 {
public int solution(int[][] sizes) {
int w = 0, h = 0; //가로 세로
int max_w = 0 , max_h = 0;
// 가로에다가 가장 큰수, 세로에다가 작은 수를 넣어
for (int i = 0; i < sizes.length; i++){
w = Math.max(sizes[i][0], sizes[i][1]);
h = Math.min(sizes[i][0], sizes[i][1]);
max_w = Math.max(max_w, w);
max_h = Math.max(max_h, h);
}
return max_w * max_h;
}
}
+ ) 다른 사람의 풀이
람다를 이용해 푼 사람도 있지만 이 정도가 가장 깔끔한 식이라고 생각한다.
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;
}
}
728x90
'Algorithm > Programmers' 카테고리의 다른 글
[programmers] 모의고사 (java) -1level (0) | 2022.02.27 |
---|---|
[programmers] 2016년 (java) -1level (0) | 2022.02.26 |
[programmers] 콜라츠 추측 (java) -1level (0) | 2022.02.25 |
[programmers] 자연수 뒤집어 배열로 만들기 (java) -1level (0) | 2022.02.23 |
[programmers] 나누어 떨어지는 숫자 배열 (java) -1level (0) | 2022.02.22 |