쾌락없는 책임 (공부)/알고리즘 문제풀이

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

허스크 2022. 8. 29. 21:06
반응형
 

프로그래머스

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

programmers.co.kr

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<vector<int>> sizes) {
    int answer = 0;
    
    int cardLongSide = 0, cardShortSide = 0;
    const int cardsCount = sizes.size();
    for(int i = 0; i < cardsCount; i++)
    {
        const int weight = sizes[i][0];
        const int height = sizes[i][1];
        if (weight > height)
        {
            cardLongSide = max(cardLongSide, weight);
            cardShortSide = max(cardShortSide, height);
            continue;
        } 
        cardLongSide = max(cardLongSide, height);
        cardShortSide = max(cardShortSide, weight);
    }
    
    return answer = cardLongSide * cardShortSide;
}

 또다시 코테를 앞두고 한번 문제를 풀어봤는데 난이도에 비해서 생각을 좀 했습니다...역시 문제는 자주자주 풀어줘야 하나봐요.

 

 일단 각 카드들을 보면서 현재 보고 있는 카드들의 긴 부분의 길이, 짧은 부분의 길이를 보고 긴 부분은 "역대 가장 긴 길이"와 비교하고 짧은 부분은 "역대 가장 짧은 부분"과 비교해주면 됩니다. 이렇게 고려하면 회전의 효과를 볼 수 있기에 이런식으로 비교한 뒤 "역대 가로, 세로의 곱"을 리턴해주면 되는 문제입니다.

반응형