Programmers Review

[Lv 1] 최소직사각형

hanseongbugi 2024. 6. 7. 14:40

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

배열의 요소를 완전 탐색하는 문제이다.

배열의 요소는 [w, h]로 구성되어 있으며, 각 요소 중 가장 최소가 되는 가로와 세로 값을 구해 넓이를 구하는 문제이다.

 

배열의 요소를 회전시키며 지갑의 넓이가 최소가 되는 것을 찾아야한다.

위 말은 가로와 세로 값 중 가장 큰 값 2개를 뽑아 넓이를 구하면 안된다는 의미와 같다.

 

따라서 가장 큰 크기의 명함의 가로와 세로를 구하는 것이 아닌 가로가 가장 큰 명함과 세로가 가장 큰 명함을 따로 구해야한다.

배열의 요소 중 큰 값을 세로로 정하고 작은 값을 가로로 정한다면

세로 중 가장 큰 값과 가로 중 가장 큰 값을 구하면 회전의 경우를 해결할 수 있다.

 

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> sizes) {
    int answer = 0;
    int w = 0;
    int h = 0;
    
    for(int i = 0;i<sizes.size();i++){
        int dw = sizes[i][0];
        int dh = sizes[i][1];
        if(dw > dh){
            w = max(w,dh);
            h = max(h,dw);
        }
        else{
            w = max(w,dw);
            h = max(h,dh);
        }
    }
    answer = w * h;
    return answer;
}