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; }
댓글을 작성해보세요.