< 내 풀이 >
import java.util.*;
class Solution {
public int solution(int[][] sizes) {
int min_arr[]=new int[sizes.length];
int max_arr[]=new int[sizes.length];
for(int i=0;i<sizes.length;i++){
int num=sizes[i][0];
int max=num;
int min=num;
for(int j=0;j<sizes[i].length;j++){
max=Math.max(num,sizes[i][j]);
min=Math.min(num,sizes[i][j]);
}
max_arr[i]=max;
min_arr[i]=min;
}
Arrays.sort(max_arr);
Arrays.sort(min_arr);
int answer = max_arr[max_arr.length-1]*min_arr[min_arr.length-1];
return answer;
}
}
✏️ 풀이 과정
ex) sizes= [[60,50] , [30,70], [60,30], [80,40]] 일 때
각 배열에서 작은 값은 min_arr에 저장하고, 큰 값은 max_arr에 저장한다.
min_arr에서 가장 큰 값과 max_arr에서 가장 큰 값을 곱한 것이 곧 가장 작은 지갑의 크기가 된다.
< 다른 사람의 풀이 >
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;
}
}
➡️ for-each문을 사용하면 훨씬 간단하고 깔끔하게 문제를 풀 수 있다.
✍🏻 느낀점
처음에 명함들을 적절히 회전시킨다고 해서, 뭔가 어렵게 생각했던 것 같다. 생각해보니 별 거 아닌 문제였다. 하지만 2차원 배열을 다루는 과정에서 너무 지저분하게 풀지 않았나싶다. 다른 사람들의 풀이를 보고 for-each문을 사용하면 훨씬 깔끔하게 풀 수 있다는 것을 알게 되었으니 앞으로는 이를 잘 활용해야겠다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 햄버거 만들기 (0) | 2024.05.07 |
---|---|
[JAVA] 모의고사 (0) | 2024.05.01 |
[JAVA] n^2 배열 자르기 (0) | 2024.05.01 |
[JAVA] 괄호 회전하기 (0) | 2024.04.30 |
[JAVA] 연속 부분 수열 합의 개수 (0) | 2024.04.30 |