본문 바로가기
Algorithm/BOJ

45. SW_Test 연습 배

by KurkurJae 2021. 2. 20.
반응형

www.acmicpc.net/problem/1092

 

1092번: 배

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

www.acmicpc.net

 

문제

지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.

각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.

 

 

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N , M ;
vector <int >crane;
vector <int> boxs;
bool cmp(int a , int b){
    return a > b;
}
int sol(){
    int time = 0;
    while (true){
        if(boxs.size() == 0) break; // 박스모두 삭제하면 끝
        for(int idx = 0; idx < crane.size() ;idx++){
            for(int i = 0  ; i < boxs.size(); i++){
                if( boxs[i] <= crane[idx] ){
                    boxs.erase(boxs.begin() + i);
                    break;
                }
            }
        }
        time++;
    }
    return time;
}
void input(){
    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;
        boxs.push_back(input);
    }
    sort(crane.begin(),crane.end(),cmp);
    sort(boxs.begin(),boxs.end(),cmp);
}
int main(){
    input();
    if(boxs[0] > crane[0]){
        cout << -1;
    }
    else{
        cout << sol();
    }
    return 0;
}
반응형

댓글