문제 링크
접근 방법
- 각 카드마다 짧은 쪽, 긴 쪽을 정한다.
- 짧은 쪽들 중 가장 긴 것과 긴 쪽들 중 가장 긴 것을 찾는다.
풀이 코드
text
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> sizes) {
int answer = 0;
int width = 0, height = 0;
// 너비와 높이를 구하기 위해 각 카드의 가로 세로를 비교하여 최대값을 찾는다.
for (int i = 0; i < sizes.size(); ++i) {
width = max(width, max(sizes[i][0], sizes[i][1])); // 가로 최대값
height = max(height, min(sizes[i][0], sizes[i][1])); // 세로 최대값
}
answer = width * height;
return answer;
}해설
text
// 너비와 높이를 구하기 위해 각 카드의 가로 세로를 비교하여 최대값을 찾는다.
for (int i = 0; i < sizes.size(); ++i) {
width = max(width, max(sizes[i][0], sizes[i][1])); // 가로 최대값
height = max(height, min(sizes[i][0], sizes[i][1])); // 세로 최대값
}모든 명함(sizes[i])에 대해 가로, 세로 중 더 큰 값을 가로로 보고, 더 작은 값을 세로로 본다.
이후 각각 가로끼리, 세로끼리 최댓값을 갱신한다.
명함을 회전할 수 있기 때문에, 항상 긴 쪽을 가로로, 짧은 쪽을 세로로 정렬하는 셈이다.