본문 바로가기
알고리즘

Programmers - 최소직사각형(C++)

by 장중앙 2021. 9. 29.

https://programmers.co.kr/learn/courses/30/lessons/86491?language=cpp 

 

코딩테스트 연습 - 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

 

풀이

명함을 90도 회전하여 보관할 수도 있으므로 가로길이, 세로길이가 고정적이지 않음

가로길이->세로길이, 세로길이->가로길이로 변경하여 보관할 수 있음

  - vector의 요소마다 {큰 값, 작은 값}의 형식으로 변경

  - vector의 각 요소의 0번째, 1번째값의 최대값을 구함 -> 요건을 만족하는 지갑의 사이즈

 

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> sizes) {
	// {큰 값, 작은 값의 형식으로 변경}
    for(int i=0;i<sizes.size();i++){
        int w=sizes[i][0];
        int h= sizes[i][1];
        if(w<h){
            sizes[i][0]=h;
            sizes[i][1]=w;
        }
    }
    int max_w=0;
    int max_h=0;
    //각 요소별 최대값 탐색
    for(int i=0;i<sizes.size();i++){
        max_w=max_w<sizes[i][0]?sizes[i][0]:max_w;
        max_h=max_h<sizes[i][1]?sizes[i][1]:max_h;
    }
    return max_w*max_h;
}

댓글