문제
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.
Solved.ac 레벨
골드 V
풀이
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m, ans = 0;
vector<int> crane;
vector<int> box;
cin >> n;
for(int i = 0; i < n; i++) {
int input;
cin >> input;
crane.push_back(input);
}
cin >> m;
for(int i = 0; i < m; i++) {
int input;
cin >> input;
box.push_back(input);
}
sort(crane.begin(), crane.end(), greater<int>());
sort(box.begin(), box.end(), greater<int>());
if(crane[0] < box[0]){
cout << -1 << "\n";
return 0;
}
while(!box.empty()) {
ans++;
for (int i = 0; i < crane.size(); i++) {
for (int j = 0; j < box.size(); j++) {
if (crane[i] >= box[j]) {
box.erase(box.begin() + j);
break;
}
}
}
}
cout << ans << "\n";
return 0;
}
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 7983번 : 내일 할거야 (0) | 2023.05.28 |
---|---|
[BOJ / C++] 15927번 : 회문은 회문 아니야!! (0) | 2023.05.28 |
[BOJ / C++] 2559번 : 수열 (0) | 2023.05.25 |
[BOJ / C++] 5591번 : 最大の和 (최대합) (0) | 2023.05.25 |
[BOJ / C++] 15565번 : 귀여운 라이언 (0) | 2023.05.25 |