true
이면 시간 count시간초과. 풀이과정도 너무 복잡하고 loop 가 많아서 이미 예상한 결과..
⭐️ 방법은 동일
⭐️ 큐 대신 vector 를 사용하는 것이 관건
항상 가장 무거운 상자를 먼저 넣기 위한 방법으로 vector 를 사용하려면 erase
를 사용하거나 존재여부를 체크하는 visit 배열을 따로 관리해야해서 우선순위 큐를 선택했는데 우선순위 큐를 사용하면 자동으로 정렬되기 때문에 크레인 for 문을 돌 때 크레인에 실는데 실패한 상자들을 관리하는 큐를 따로 두어야 하기 때문에 과정이 더 복잡해짐
❗️ 코드의 간결성을 생각한다면 vector 를 사용한 for 문이나 erase
사용도 고려한 유연한 선택 필요
❗️ 모든 상자를 실을 수 없는 경우는 가장 무거운 상자를 가장 무게제한이 큰 크레인에 실지 못하는 경우밖에 없음
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n,m;
cin >> n;
vector<int> crain;
for(int i=0;i<n;i++) {
int k;
cin >> k;
crain.push_back(k);
}
cin >> m;
vector<int> box;
for(int i=0;i<m;i++) {
int k;
cin >> k;
box.push_back(k);
}
sort(crain.begin(),crain.end(),greater<>());
sort(box.begin(),box.end(),greater<>());
if(box[0]>crain[0]) {
cout << -1 << endl;
return 0;
}
int ans=0;
while (!box.empty()) {
bool exist=false;
for(int i=0;i<n;i++) {
for(int j=0;j<box.size();j++) {
if(crain[i]>=box[j]) {
box.erase(box.begin()+j);
exist=true;
break;
}
}
}
if(exist) ans++;
}
cout << ans << endl;
}