해당 문제는 여기에서 확인하실 수 있습니다.
이 문제를 해결하기 위해 먼저 모든 명함이 수납 가능한 최소 크기의 지갑을 만들기 위한 조건을 이해해야 합니다. 각 명함은 회전할 수 있으므로, 가로와 세로를 뒤집어가며 지갑에 넣을 수 있습니다. 따라서 각 명함의 길이 중 더 큰 값을 항상 가로로 두고, 더 작은 값을 세로로 두면 모든 명함이 적절히 회전되어 지갑에 수납됩니다.
모든 명함에 대해 이 과정을 수행하면서, 가장 큰 가로와 세로의 값을 추적하여 지갑의 최종 크기를 결정할 수 있습니다. 전체 명함 중 최대 가로 길이와 최대 세로 길이를 구한 후, 그 값을 곱하여 가장 작은 지갑의 면적을 반환하면 됩니다. 이를 통해 모든 명함이 수납될 수 있는 최소 크기의 지갑을 만들 수 있습니다.
class Solution {
public int solution(int[][] sizes) {
int maxWidth = 0; // 가로 길이의 최댓값
int maxHeight = 0; // 세로 길이의 최댓값
for (int[] size : sizes) {
// 각 명함의 가로와 세로 중 큰 값을 가로로, 작은 값을 세로로 설정
int width = Math.max(size[0], size[1]);
int height = Math.min(size[0], size[1]);
// 현재까지의 최대 가로와 최대 세로 값 갱신
maxWidth = Math.max(maxWidth, width);
maxHeight = Math.max(maxHeight, height);
}
// 지갑의 최소 크기 계산
return maxWidth * maxHeight;
}
}