Tech/Algorithm

[BOJ] 백준 1092 배 c++ (그리디)

0m1n 2023. 1. 12. 17:06
728x90
반응형

문제 출처 : https://www.acmicpc.net/problem/1092 

 

1092번: 배

첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보

www.acmicpc.net


풀이

박스를 배로 옮기는 시간의 최솟값을 출력하는 문제이다. 크레인과 박스를 내림차순으로 정렬한 후 박스를 담을 수 있는 경우 vector를 삭제해주면 된다. (그리디 알고리즘)


코드

#include <bits/stdc++.h>

using namespace std;

int N, M;
int ans;

int main(void) {
    ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    cin >> N;
    vector<int> crane(N);
    for(int i = 0; i < N; i++)
        cin >> crane[i];
    sort(crane.begin(), crane.end(), greater<int>());
    cin >> M;
    vector<int> box(M);
    for(int i = 0; i < M; i++)
        cin >> box[i];
    sort(box.begin(), box.end(), greater<int>());

    if(box[0] > crane[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;
}
728x90
반응형