본문 바로가기
알고리즘, 문제해결/알고리즘 문제풀이

[프로그래머스] 최소직사각형

by 카펀 2021. 9. 27.

문제 링크:

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

 

코딩테스트 연습 - 8주차

[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

programmers.co.kr

 

이번 주 문제는 너무 쉬웠던 것 같아서 아쉽네요.

주어진 모든 명함을 어떻게든 겹쳤을 때, 명함을 모두 담을 수 있는 지갑의 크기가 최소가 되도록 하면 됩니다.

 

명함에서 주어진 자체적인 가로, 세로의 구분은 의미가 없기 때문에

저는 긴 쪽을 가로, 짧은 쪽을 세로라고 정의하였습니다.

이후 주어진 모든 명함에 대해 가로의 최댓값과 세로의 최댓값을 각각 구하고, 이를 곱하여 지갑의 크기를 구했습니다.

 

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

using namespace std;

int solution(vector<vector<int>> sizes) {
    
    int horizontal = -1, vertical = -1;
    for (auto& next : sizes) {
        //더 긴 쪽을 가로, 짧은 쪽을 세로라고 하겠다.
        horizontal = max(horizontal, max(next[0], next[1]));
        vertical = max(vertical, min(next[0], next[1]));
    }

    return horizontal*vertical;
}

 

 

채점 결과

댓글