반응형
무게 제한이 더 큰 크레인이 더 무거운 물건을 드는 것이 유리하다.
그리디라는 것을 검증하기 위해 다음과 같은 과정을 거쳤다.
- 무게 제한이 더 작은 크레인이 무게가 무거운 물건을 들었을 때의 정답이 있다.
-> 무게제한이 더 큰 크레인이 그 물건을 들어도 정답이 될 수 있으므로, 합당하다.
부분구조가 가능하기 때문에 전체 구조가 가능하다는 논리하에 검증한 것이다.
- 위를 구현하기 위해 크레인의 무게 제한, 물건의 무게를 내림차순으로 정렬한뒤, 크레인이 물건을 순회하면서 들 수 있도록 했다.
- 다만, 크레인들은 무게가 무거운 물건은 스킵하되 더 가벼운 물건을 들 수 있도록 해서 전체 크레인이 최대한으로 물건을 들 수 있도록 했다.
- 크레인이 운반을 못하는 edge case는 무게 제한이 가장 큰 크레인이 무게가 가장 무거운 물건을 못 들 때 이므로, 추가적인 케이스 관리를 해주었다.
코드는 다음과 같다.
#include <iostream>
#include <algorithm>
using namespace std;
#define FAST std::ios::sync_with_stdio(0); std::cin.tie(0);
#define INF 2147483647
long long B,K;
vector<int> krain;
vector<int> box;
int carried[10001] = {0,};
/*
화물을 배에 실어야 한다.
크레인 N대
1분에 박스 한대씩.
무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다.
1. 각 크레인의 무게 제한
2. 각 박스의 무게제한
-> 어떤 크레인이 어떤 박스를 가지고 운반하는게 좋을까?
모든 크레인은 동시에 움직인다.
그리디일까?
- 들 수 있는 무게가 가장 큰 크레인이 가장 큰 물건을 든다. && 들지 못하는 물건의 경우 들 수 있는 물건 중 가장 무거운 물건을 든다.
- 정답이 들 수 있는 무게가 더 작은 r 크레인이 가장 큰 물건을 든다고 쳐보자.
-> 바뀐 상황도 정답이 가능하다.
- 다만 해당 크레인이 물건을 들지 못하는 상황인 경우, 더 큰 크레인이 들때까지 기다릴 수도 있다.
*/
void input() {
cin >> K;
int n;
for(int i = 0; i < K; i++){
cin >> n;
krain.push_back(n);
}
cin >> B;
for(int i = 0; i < B; i++){
cin >> n;
box.push_back(n);
}
}
void printContainer(const vector<int>& c){
for (auto i = c.begin(); i != c.end(); i++)
std::cout << *i << ' ';
std::cout << '\n';
}
int solve(){
int boxCount = 0;
int time = 0;
sort(krain.begin(), krain.end(), greater<int>());
sort(box.begin(), box.end(), greater<int>());
if(krain[0] < box[0])
return -1;
while (box.empty() == false) {
for (int i = 0; i < K; i++) {
//들 수 있는 박스를 찾아서.
for (int j = 0; j < box.size(); j++) {
if(krain[i] >= box[j]) {
box.erase(box.begin() + j);
// printContainer(box);
break;
}
}
}
time++;
}
return time;
}
int main() {
FAST
input();
cout << solve();
}
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
백준 1182 - 부분수열의 합 - 브루트포스 , not 투 포인터 (1) | 2023.11.26 |
---|---|
백준 1644- 소수의 연속합 : 에라토스테네스의 체, 투 포인터 알고리즘 (2) | 2023.11.26 |
[Programmers] PCCP 기출문제 2 (0) | 2023.11.23 |
백준1141 - 문자열, 그리디 (0) | 2023.11.18 |
13335 - 트럭 (큐, 시뮬레이션) (2) | 2023.05.02 |