class Solution {
public int solution(int[][] sizes) {
int answer = 0;
int width = 0;
int height = 0;
for(int i = 0;i < sizes.length; i++) {
int max = (sizes[i][0] >= sizes[i][1] ? sizes[i][0] : sizes[i][1]);
int min = (sizes[i][1] >= sizes[i][0] ? sizes[i][0] : sizes[i][1]);
width = (max > width ? max : width);
if(min >= width) height = min;
else if(min > height) height = min;
}
answer = width * height;
return answer;
}
}
📝 해결
! 풀이 순서
1. 가로, 세로의 변수인 width, height를 생성한다.
2. 배열의 요소는 2개만 제공하기 때문에 sizes의 개수만큼만 반복한다.
3. max는 2개의 요소 중 큰 값을 가진다.
min은 2개의 요소 중 작은 값을 가진다.
4. width는 가장 큰 값을 가진다. max와 비교하여 저장하도록 한다.
5. height는 width보다 같거나 작아야 한다. 그리고 max보다 작거나 같고 min보다 크거나 같아야 한다.
width >= max >= height >= min
정리하면 이런 식을 가진다.
min은 절대 width와 height보다 클 수는 없기 때문에 min이 크다면 height에 저장되도록 한다.
6. 반복이 종료되고 width와 height를 곱한 값을 answer에 저장한다.
제공된 예제 배열을 보고 최대 수의 짝꿍이 되는 수보다 1단계 더 큰 수가 height가 될 것 같다고 생각하고 시뮬레이션을 해보니 두 수가 max 수를 가지는 경우에서 막힌다는 점을 발견하고 두 수가 모두 높은 수라는 점을 적용시켜 생각해보니 height가 될 수 있는 수의 흐름이 잡혔다. 막상 풀고 나서 보니 간단한 문제였던 것 같다.
📍 문제