쾌락없는 책임 (공부)/알고리즘 문제풀이
[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;
}
또다시 코테를 앞두고 한번 문제를 풀어봤는데 난이도에 비해서 생각을 좀 했습니다...역시 문제는 자주자주 풀어줘야 하나봐요.
일단 각 카드들을 보면서 현재 보고 있는 카드들의 긴 부분의 길이, 짧은 부분의 길이를 보고 긴 부분은 "역대 가장 긴 길이"와 비교하고 짧은 부분은 "역대 가장 짧은 부분"과 비교해주면 됩니다. 이렇게 고려하면 회전의 효과를 볼 수 있기에 이런식으로 비교한 뒤 "역대 가로, 세로의 곱"을 리턴해주면 되는 문제입니다.
반응형