LV1 - 최소직사각형 만들기
2022.05.28
<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;
}
댓글을 작성해보세요.