문제 링크:
https://programmers.co.kr/learn/courses/30/lessons/86491
코딩테스트 연습 - 8주차
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133
programmers.co.kr
이번 주 문제는 너무 쉬웠던 것 같아서 아쉽네요.
주어진 모든 명함을 어떻게든 겹쳤을 때, 명함을 모두 담을 수 있는 지갑의 크기가 최소가 되도록 하면 됩니다.
명함에서 주어진 자체적인 가로, 세로의 구분은 의미가 없기 때문에
저는 긴 쪽을 가로, 짧은 쪽을 세로라고 정의하였습니다.
이후 주어진 모든 명함에 대해 가로의 최댓값과 세로의 최댓값을 각각 구하고, 이를 곱하여 지갑의 크기를 구했습니다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> sizes) {
int horizontal = -1, vertical = -1;
for (auto& next : sizes) {
//더 긴 쪽을 가로, 짧은 쪽을 세로라고 하겠다.
horizontal = max(horizontal, max(next[0], next[1]));
vertical = max(vertical, min(next[0], next[1]));
}
return horizontal*vertical;
}
'알고리즘, 문제해결 > 알고리즘 문제풀이' 카테고리의 다른 글
[백준 1943번] 동전 분배 (0) | 2021.09.30 |
---|---|
[백준 1823번] 수확 (0) | 2021.09.29 |
[백준 1727번 문제] 커플 만들기 (0) | 2021.09.26 |
[백준 10999번] 구간 합 구하기 2 (0) | 2021.09.26 |
[백준 2042번] 구간 합 구하기 (0) | 2021.09.25 |
댓글