[프로그래머스 문제풀이] 18. 최소직사각형

WIGWAG·2023년 1월 4일
0

프로그래머스

목록 보기
18/32

나의 풀이

풀이 메커니즘은 다음과 같다.

  1. 루프를 돌면서 가로가 세로보다 크도록 바꾸기
  2. 가로, 세로 각각 가장 큰 수를 얻어서 두 수를 곱하기

1번을 하기 위해 루프를 돌아서 벡터들을 정렬한 다음
max_element로 가로, 세로 각각 가장 큰 수를 구했다.

int solution(vector<vector<int>> sizes) {
    for (size_t i = 0; i < sizes.size(); i++)
    {
        sort(sizes[i].begin(), sizes[i].end());
    }

    int max_row = max_element(sizes.begin(), sizes.end(), [](vector<int> a, vector<int> b) { return a[1] < b[1]; })->at(1);
    int max_column = max_element(sizes.begin(), sizes.end())->at(0);
    return max_row * max_column;
}

추천을 가장 많이 받은 풀이

루프 한 번을 돌면서 위의 메커니즘에서 1번과 2번을 전부 해결했다.
w에는 가로와 세로 중 작은 수를 넣고 h에는 큰 수를 넣는다.
그리고 max로 각각의 최대값을 구한다.

int solution(vector<vector<int>> sizes) {
    int answer=0;

    int w=0, h=0;
    for(int i=0; i<sizes.size(); i++)
    {
        w=max(w,min(sizes[i][0],sizes[i][1]));
        h=max(h,max(sizes[i][0],sizes[i][1]));
    }
    answer=w*h;

    return answer;
}

최소직사각형 문제 링크

profile
윅왁의 프로그래밍 개발노트

0개의 댓글