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