백준 1092 배 문제풀이 (JAVA)
문제
지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 출력한다. 만약 모든 박스를 배로 옮길 수 없으면 -1을 출력한다.
풀이
소스코드
import java.util.*;
import java.io.*;
public class Main{
public static void main(String [] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;// = new StringTokenizer(br.readLine());
final int NUMBER_OF_CRAIN = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
ArrayList <Crain> crain = new ArrayList<Crain>();
crain.add(new Crain(0));
for(int i=0;i<NUMBER_OF_CRAIN;i++) {
crain.add(new Crain(Integer.parseInt(st.nextToken()) ) );
}
crain.sort(Comparator.naturalOrder());
int maxCrainWeight = crain.get(NUMBER_OF_CRAIN).weight;
int railBox[] = new int [NUMBER_OF_CRAIN + 1];
for(int i=1;i<=NUMBER_OF_CRAIN;i++) {
crain.get(i).rail = i;
}
int numberOfBox = Integer.parseInt(br.readLine());
boolean canOperation = true;
st = new StringTokenizer(br.readLine());
for(int i=0;i<numberOfBox;i++) {
int box = Integer.parseInt(st.nextToken());
if(maxCrainWeight < box) {
canOperation = false;
break;
}
for(int j=1;j<=NUMBER_OF_CRAIN;j++) {
if(box <= crain.get(j).weight) {
railBox[j]++;
break;
}
}
}
if(canOperation) {
int day = 0;
while(numberOfBox > 0) {
day++;
for(int i=NUMBER_OF_CRAIN;i>0;i--) {
if(crain.get(i).rail == 0) {
continue;
}
if(railBox[crain.get(i).rail]==0) {
int j;
for(j=crain.get(i).rail;j>0;j--) {
if(railBox[j] != 0) {
crain.get(i).rail = j;
break;
}
}
if(j==0) {
crain.get(i).rail = j;
continue;
}
}
numberOfBox--;
railBox[crain.get(i).rail]--;
}
}
sb.append(day);
}else {
sb.append(-1);
}
sb.append("\n");
bw.write(sb.toString());
bw.flush();
br.close();
bw.close();
}
}
class Crain implements Comparable<Crain>{
int weight;
int rail;
@Override
public int compareTo(Crain crain) {
if(this.weight == crain.weight) return 0;
else if(this.weight > crain.weight) return 1;
else return -1;
}
public Crain(){}
public Crain(int weight) {
this.weight = weight;
}
}
Author And Source
이 문제에 관하여(백준 1092 배 문제풀이 (JAVA)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@phjppo0918/백준-1092-배-문제풀이-JAVA저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)