https://www.acmicpc.net/problem/1092
1092번: 배
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보
www.acmicpc.net
그리디 문제다.
화물의 무게와 크레인의 무게를 정렬한 후 무게 제한이 큰 크레인부터 화물을 담았다.
벡터를 이용했고, 크레인에 화물을 담을 때, 화물을 벡터에서 제거했다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int limit[50];
vector<int> box;
int main() {
// 입출력 속도를 단축시키기 위함
ios::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n;
for (int i = 0; i < n; i++) cin >> limit[i];
int m; cin >> m;
for (int i = 0; i < m; i++) {
int a; cin >> a;
box.push_back(a);
}
// 정렬
sort(limit, limit + n);
sort(box.begin(), box.end());
// 화물의 최대 무게가 크레인의 무게 제한보다 무거우면 종료
if (box[m - 1] > limit[n - 1]) {
cout << -1;
return 0;
}
// 화물이 남아 있으면 반복
int cnt = 0;
while (box.size()) {
int i = box.size() - 1;
cnt++;
// 무게 제한이 큰 크레인부터 싣기
for (int j = n - 1; j >= 0; j--) {
for (i; i >= 0; i--) {
if (box[i] <= limit[j]) {
box.erase(box.begin() + i);
i--;
break;
}
}
}
}
cout << cnt;
}

O(∩_∩)O
'Algorithm > Greedy' 카테고리의 다른 글
| [C++] BOJ(백준) 7983 내일 할거야 (0) | 2023.07.24 |
|---|---|
| [C++] BOJ(백준) 1744 수 묶기 (0) | 2023.03.05 |
| [C++] BOJ(백준) 1082 방 번호 (0) | 2023.02.21 |
| [C++] BOJ(백준) 1715 카드 정렬하기 (1) | 2023.02.15 |
| [C++] BOJ(백준) 2138 전구와 스위치 (0) | 2023.02.12 |
