명함을 수납할 수 있는 최소한의 지갑 크기를 계산하는 문제로, 명함을 가로 또는 세로 방향으로 자유롭게 회전할 수 있다는 조건을 고려해야 함

사용한 함수 및 헤더

  • #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;
}

간단한 논리

모든 명함을 회전시켜 가로가 항상 더 큰 값이 되도록 정렬한 후, 각각의 최대 가로와 최대 세로 값을 구해 곱하면 최소 지갑 크기를 구할 수 있음.