명함을 수납할 수 있는 최소한의 지갑 크기를 계산하는 문제로, 명함을 가로 또는 세로 방향으로 자유롭게 회전할 수 있다는 조건을 고려해야 함
사용한 함수 및 헤더
- #include <vector> : 명함 크기를 담는 2차원 배열 사용
- #include <algorithm> : std::max 함수 사용
최종 코드
#include <algorithm>
#include <vector>
using namespace std;
int solution(vector<vector<int>> sizes) {
int w = 0;
int h = 0;
for (int i = 0; i < sizes.size(); i++) {
// 회전하여 가로가 항상 더 크거나 같게 정렬
if (sizes[i][1] > sizes[i][0]) {
swap(sizes[i][0], sizes[i][1]);
}
// 가장 큰 가로, 세로 값 업데이트
w = max(w, sizes[i][0]);
h = max(h, sizes[i][1]);
}
return w * h;
}
간단한 논리
모든 명함을 회전시켜 가로가 항상 더 큰 값이 되도록 정렬한 후, 각각의 최대 가로와 최대 세로 값을 구해 곱하면 최소 지갑 크기를 구할 수 있음.