쌓고 쌓다

[프로그래머스] 최소직사각형 C++ 풀이 본문

알고리즘/프로그래머스

[프로그래머스] 최소직사각형 C++ 풀이

승민아 2022. 7. 4. 13:52

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

 

코딩테스트 연습 - 최소직사각형

[[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 answer = 0;
    int height=0; // 높이
    int width=0; // 가로
    
    for(int i=0;i<sizes.size();i++)
    {
        if(sizes[i][0]>sizes[i][1])
        {
            height=max(height,sizes[i][0]);
            width=max(width,sizes[i][1]);
        }
        else
        {
            height=max(height,sizes[i][1]);
            width=max(width,sizes[i][0]);
        }

    }
    
    answer=height*width;
    return answer;
}

 

한쪽 길이를 최대로 해주고, 한쪽 길이를 최소로 해준다면 최소 넓이를 구할 수 있습니다.

가로, 세로 길이가 주어질 때

height에 두 길이중 큰 길이를 넣고, width에는 작은 나머지 길이를 넣어

max() 함수를 통해 갱신해 나갈 것입니다.

 

if(sizes[i][0]>sizes[i][1])
{
     height=max(height,sizes[i][0]);
     width=max(width,sizes[i][1]);
}

위의 if문은 가로길이가 세로 길이보다 클때이므로 ( 가로길이 > 세로길이 )

가로길이(sizes[i][0])를 height와 비교하여 더 크다면 갱신해줍니다.

남은 길이는 width와 비교하여 갱신해줍니다.

 

아래의 else는 위의 if문은 반대 케이스로

"가로길이 < 세로길이"인 경우입니다.

else
{
      height=max(height,sizes[i][1]);
      width=max(width,sizes[i][0]);
}

Comments