Search

[Baekjoon] 1092 배

Tags
Greedy
Date
2023/11/10

설명

지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다.
각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오.

입력

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

출력

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

예시 입력

예시 출력

3 6 8 9 5 2 5 2 4 7
JavaScript
복사
2
JavaScript
복사

풀이 과정

문제의 목표는 “모든 화물을 배로 옮기는데 걸리는 최소 시간” 을 구하는 것입니다.
항구에는 크레인이 N대 있고, 각 크레인 마다 실을 수 있는 무게 제한이 있습니다.
무게 제한 보다 무거운 박스는 크레인으로 움직일 수 없습니다.
최소로 화물을 움직이기 위해서는 가장 무게 제한이 높은 크레인이 무거운 박스를 들어야 합니다.

최종 코드

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.StringTokenizer; public class _1092 { static int N, M; static List<Integer> cranes, boxes; public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stringTokenizer; cranes = new ArrayList<>(); boxes = new ArrayList<>(); N = Integer.parseInt(br.readLine()); stringTokenizer = new StringTokenizer(br.readLine()); for (int i = 0; i < N; i++) { cranes.add(Integer.parseInt(stringTokenizer.nextToken())); } M = Integer.parseInt(br.readLine()); stringTokenizer = new StringTokenizer(br.readLine()); for (int i = 0; i < M; i++) { boxes.add(Integer.parseInt(stringTokenizer.nextToken())); } Collections.sort(cranes, Collections.reverseOrder()); Collections.sort(boxes, Collections.reverseOrder()); if (cranes.get(0) < boxes.get(0)) { System.out.println(-1); } else { int time = 0; while (!boxes.isEmpty()) { int idx = 0; for (int i = 0; i < cranes.size(); i++) { if (idx == boxes.size()) { break; } else if (cranes.get(i) >= boxes.get(idx)) { boxes.remove(idx); } else { idx++; i--; } } time++; } System.out.println(time); } } }
JavaScript
복사