백준|1092번|배

JSK·2022년 7월 31일
0

자바 PS풀이

목록 보기
29/51

문제설명
배에 상자를 실을 크레인의 개수와 각 크레인마다 들 수 있는 무게, 그리고 옮겨야할 상자들의 개수와 무게를 입력받고 모든 상자를 배에 싣는데 최소한 몇분이 걸리는 지 출력하는 문제입니다,(모든 크레인은 한번에 작동하고 작동시간은 1분입니다.)

작동 순서
1. 크레인의 개수와 들 수 있는 무게를 입력받습니다.
2. 크레인을 무게순으로 정렬합니다.
3. 박스의 개수와 무게를 입력받습니다.
4. 박스를 무게순으로 정렬합니다.
5. 박스를 무거운 것부터 무거운 크레인에 싣습니다.
6. 만약 가장 무거운 상자를 실을 수 있는 경우 그 상자를 싣고 확인해야 할 상자의 개수를 -1해줍니다.
7. 박스를 크레인에 실을 수 없는 경우 그 다음 박스의 무게를 확인합니다.
8. 더 이상 실을 수 있는 크레인에 실을 수 있는 상자가 없는 경우 빈 크레인이 있더라도 작업을 수행합니다.
9. 모든 상자를 배에 실은 뒤 작업이 실행된 횟수를 출력합니다.

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class 백준_1092번_배 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N=Integer.parseInt(br.readLine());
        int[] crain=new int[N];
        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i=0;i<N;i++) crain[i]=Integer.parseInt(st.nextToken());
        Arrays.sort(crain);

        int M=Integer.parseInt(br.readLine());
        int[] box = new int[M];


        st = new StringTokenizer(br.readLine());

        for(int i=0;i<M;i++) box[i]=Integer.parseInt(st.nextToken());
        Arrays.sort(box);

        int count = 0, remains = M;

        if(crain[N-1]<box[M-1]) System.out.print(-1);
        else{
            while(remains>0){
                for(int i=N-1;i>=0;) {
                    for(int j=M-1;j>=0;j--){
                        if(i==-1) break;
                        if(crain[i]>=box[j] & box[j]!=0) {
                            box[j]=0;
                            remains--;
                            i--;
                            if(j==M-1) M--;

                        }
                        if(j==0) i=-1;
                    }
                }
                count++;
            }
            System.out.print(count);
        }
    }
}
profile
학사지만 AI하고 싶어요...

0개의 댓글