본문 바로가기

알고리즘

프로그래머스/최소직사각형/cpp

https://school.programmers.co.kr/learn/courses/30/lessons/86491

문제


명함들의 가로길이와 세로 길이가 있을때 모든 명함이 들어갈 수있는 최소 크기의 명함 지갑을 만들어라. 

 

입력


명함들의 사이즈가 주어진다.

sizes의 길이는 10000 이하

[w,h] 형식일때 w,h 는 각각 1000이하 자연수

 

출력


w x h 를 리턴한다.

 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> sizes) {
    int answer = 0;
    int minw = -1; // w 의 최대 크기
    int minh = -1; // h 의 최대 크기
    for(int i=0;i<sizes.size();i++){
        if(sizes[i][0] > sizes[i][1]){ // 만약 size의 가로가 세로보다 크다면
            minw = max(sizes[i][0],minw); // size의 가로는 가로의 최대크기와 비교
            minh = max(sizes[i][1],minh); // size의 세로는 세로의 최대크기와 비교
        } // 이유는 가로를 세로로 눕혀서 사용할수있기때문에 가로와 세로의 구분은 중요하지는 않다.
        else{ // 만약 반대의 경우
            minw = max(sizes[i][1],minw); // 반대로 비교한다. 가로를 세로 
            minh = max(sizes[i][0],minh); // 세로를 가로와 비교한다.
        }
    }
    answer = minw * minh; // 출력 형식에 맞춰 가장 작은 지갑의 크기를 리턴한다.
    return answer;
}