https://programmers.co.kr/learn/courses/30/lessons/86491
이중배열 문제이다.
이중배열에서 원하는 값을 어떻게 꺼낼지, max를 어떻게 구할지에서 많이 헤맸다.
명함의 크기를 조정한다는 부분을 처음에 엄청 복잡하게 생각했었는데, 가로가 세로보다 큰 값으로 모두 통일하면 간단히 해결할 수 있는 문제였다.
class Solution {
public int solution(int[][] sizes) {
//가로 세로 중 가로에 큰 값이 오도록 조정
for (int i = 0; i < sizes.length; i++) {
if (sizes[i][0] < sizes[i][1]) {
int a = sizes[i][0];
int b = sizes[i][1];
sizes[i][0] = b;
sizes[i][1] = a;
}
}
//가로 중 가장 큰 값, 세로 중 가장 큰 값이 넣음
int max1 = sizes[0][0];
int max2 = sizes[0][1];
for (int i = 0; i < sizes.length; i++) {
if (sizes[i][0] > max1) {
max1 = sizes[i][0];
}
if (sizes[i][1] > max2) {
max2 = sizes[i][1];
}
}
int answer = max1 * max2;
return answer;
}
}
다른 사람의 답을 참고하면, 이중배열의 경우 for each문을 사용해서 간단히 꺼낼 수 있다.
특히 이 경우 이중배열 안의 배열 크기는 2로 고정된 경우라 [0], [1]만 사용하면 된다.
for (int[] size : sizes) {
int paramMax = Math.max(size[0], size[1]);
int paramMin = Math.min(size[0], size[1]);
}
그리고 두 값 중 최대값과 최소값을 구하는 Math.max와 Math.min을 활용하면 비교적 간단히 끝낼 수 있다.
아래와 같이 for each문 + Math.max와 Math.min을 중첩해서 사용하면 코드를 줄일 수 있다.
for (int[] card : sizes) {
length = Math.max(length, Math.max(card[0], card[1]));
height = Math.max(height, Math.min(card[0], card[1]));
}
'Language > JAVA' 카테고리의 다른 글
#최소값, 최대값 구하기 (0) | 2022.01.19 |
---|---|
#Stream (0) | 2022.01.19 |
[프로그래머스] 3진법 뒤집기 (0) | 2022.01.19 |
[프로그래머스] 하샤드 수 (0) | 2022.01.19 |
[프로그래머스] 콜라츠 추측 (0) | 2022.01.19 |