LV1 - 최소직사각형 만들기

<algorithm>의 min, max 함수에 대한 이해랑 숙련도가 부족했다.  min, max를 생각을 미처 못했다.
- min(a, b) : a와 b를 비교하여 가장 작은 값을 반환한다.
- max(a, b) : a 와 b를 비교하여 가장 큰 값을 반환한다.
 
내 풀이
int solution(vector<vector<int>> sizes) {
    int answer = 0;
    vector<int> W;
    vector<int> H;
    vector<int> temp;
    int maxSize;
    bool moreBig = false;

    // 가로 세로 vector로 분리.
    for (int i = 0; i < sizes.size(); i++)
    {
            W.push_back(sizes[i][0]);
            H.push_back(sizes[i][1]);
    }

    // 가로 세로 오름차순으로 정렬.
    sort(W.begin(), W.end());
    sort(H.begin(), H.end());

    // 가로 세로에서 가장 큰 수 찾고 가로에 큰 수 있으면 moreBig true 세로에 큰 수가 있으면 false.
    maxSize = W.back() > H.back() ? W.back() : H.back();
    moreBig = W.back() > H.back() ? true : false;

    if (moreBig == true)
    {
        for (int i = 0; i < sizes.size(); i++)
        {
            if (sizes[i][0] < sizes[i][1])
                sizes[i][1] = sizes[i][0];
         
            temp.push_back(sizes[i][1]);
        }
        sort(temp.begin(), temp.end());
        answer = maxSize * temp.back();
    }
    else
    {
        for (int i = 0; i < sizes.size(); i++)
        {
            if (sizes[i][0] > sizes[i][1])
                sizes[i][0] = sizes[i][1];

            temp.push_back(sizes[i][0]);
        }
        sort(temp.begin(), temp.end());
        answer = maxSize * temp.back();
    }
    return answer;
}
잘한 사람 풀이
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;
}

댓글을 작성해보세요.


채널톡 아이콘