728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/86491
이번 문제는 Min, Max만 잘 써도 쉽게 풀리는 문제이다
문제 설명 중에
"가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다."
라고 설명되어 있다.
예를 들어 애초에 가로를 더 큰 수로 맞추고, 세로를 더 작은 수로 맞추면 두 수를 비교하기가 쉬워진다.
가로 세로의 길이를 Math.min(a, b)과 Math.max(a, b) 를 써서 했다면 더 쉽게 풀었을 것 같다.
나의 풀이는 아래와 같다.
package miniRactangular;
/**
* 최소직사각형 문제
*
* https://programmers.co.kr/learn/courses/30/lessons/86491
*
* 이번문제는 Min, Max만 잘 써도 쉽게 풀 수 있음
*/
public class MiniRactangular {
public static void main(String[] args) {
Solution s = new Solution();
int[][] sizes1 = {{60, 50}, {30, 70}, {60, 30}, {80, 40}};
System.out.println(s.solution(sizes1));
int[][] sizes2 = {{10, 7}, {12, 3}, {8, 15}, {14, 7}, {5, 15}};
System.out.println(s.solution(sizes2));
int[][] sizes3 = {{14, 4}, {19, 6}, {6, 16}, {18, 7}, {7, 11}};
System.out.println(s.solution(sizes3));
}
}
class Solution {
public int solution(int[][] sizes) {
int maxW = Integer.MIN_VALUE;
int maxH = Integer.MIN_VALUE;
for (int i = 0; i < sizes.length; i++) {
int w, h;
int tmp1 = sizes[i][0];
int tmp2 = sizes[i][1];
w = tmp1 > tmp2 ? tmp1 : tmp2;
h = tmp1 < tmp2 ? tmp1 : tmp2;
maxW = Math.max(maxW, w);
maxH = Math.max(maxH, h);
}
return maxW * maxH;
}
}
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/java] 게임 맵 최단거리 - BFS 사용 (0) | 2022.02.25 |
---|---|
[프로그래머스/java] 멀쩡한 사각형 - 유클리드 호제법 사용 (0) | 2022.02.25 |
[프로그래머스/java] 타겟 넘버 - BFS 이용 (0) | 2022.01.06 |
[프로그래머스/java] 직업군 추천하기 (0) | 2021.09.06 |
[프로그래머스/java] 상호 평가 - 네이버 코딩테스트(코테) 기출문제 (0) | 2021.08.12 |
댓글