https://programmers.co.kr/learn/courses/30/lessons/86491
명함의 가로 세로 최대 크기를 구해주면 된다.
하지만 가로 세로를 바꿨을 때 명함이 들어간다면 더 작은 크기로도 명함을 만들 수 있는 경우가 있다.
때문에 아래 케이스를 확인해 봐야 한다.
public int solution(int[][] sizes) {
int answer = 0;
int w = Integer.MIN_VALUE, h = Integer.MIN_VALUE;
for (int i = 0; i < sizes.length; i++) {
// 첫번째 인덱스는 그냥 넣어준다.
if (i == 0) {
w = sizes[i][0];
h = sizes[i][1];
} else {
// w와 현재 가로값의 차이의 절대값, h와 현재 세로값의 차이의 절대값의 합
int abs = Math.abs(w - sizes[i][0]) + Math.abs(h - sizes[i][1]);
// w와 현재 세로값의 차이의 절대값, h와 현재 가로값의 차이의 절대값의 합
int abs_reverse = Math.abs(w - sizes[i][1]) + Math.abs(h - sizes[i][0]);
// 위 두개 값 중에서 기존 절대값 합이 더 작으면 기존대로 가로, 세로의 최대값을 구해준다.
if (abs < abs_reverse) {
w = Math.max(w, sizes[i][0]);
h = Math.max(h, sizes[i][1]);
} else {
// 그게 아니라면 가로, 세로값을 바꿔서 가로, 세로의 최대값을 구해준다.
w = Math.max(w, sizes[i][1]);
h = Math.max(h, sizes[i][0]);
}
}
}
answer = w * h;
return answer;
}