알고리즘/[ Baekjoon ]

[ BOJ ][JAVA][1092] 배

kim.svadoz 2021. 4. 20. 23:05
반응형

www.acmicpc.net/problem/1092

 

1092번: 배

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

www.acmicpc.net

시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 6572 1497 1100 24.893%

문제

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

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

입력

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

출력

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

예제 입력 1

3
6 8 9
5
2 5 2 4 7

예제 출력 1

2

코드

/*
    그리디 + 정렬
*/
import java.io.*;
import java.util.*;

public class p1092 {
    static int n, m;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());
        List<Integer> crane = new ArrayList<>();
        List<Integer> box = new ArrayList<>();

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            int a = Integer.parseInt(st.nextToken());
            crane.add(a);
        }

        m = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < m; i++) {
            int a = Integer.parseInt(st.nextToken());
            box.add(a);
        }

        // 내림차순
        Collections.sort(crane, new Desc());
        Collections.sort(box, new Desc());
        int time = 0;
        // 박스의 최대 무게 > 크레인 최대 중량일 경우 -1
        if (box.get(0) > crane.get(0)) {
            System.out.println(-1);
        } else { // 그 외 그리디 구현
            while (box.size() != 0) {
                int idx = 0;
                int tmp = 0;
                while (idx < n) {
                    if (tmp == box.size()) {
                        break;
                    }

                    if (box.get(tmp) <= crane.get(idx)) {
                        box.remove(tmp);
                        idx++;
                    } else {
                        tmp++;
                    }
                }
                time++;
            }
            System.out.println(time);
        }

    }
}
class Desc implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }

}
반응형