|
| 1 | +import java.util.ArrayList; |
| 2 | +import java.util.Collections; |
| 3 | +import java.util.Scanner; |
| 4 | + |
| 5 | +public class Main { |
| 6 | + |
| 7 | + public static void main(String[] args) { |
| 8 | + Scanner sc = new Scanner(System.in); |
| 9 | + |
| 10 | + int n, m, result = 0, cnt = 0; |
| 11 | + ArrayList<Integer> cranes = new ArrayList<Integer>(); |
| 12 | + ArrayList<Integer> boxes = new ArrayList<Integer>(); |
| 13 | + |
| 14 | + int[] positions = new int[50]; // 각 크레인이 현재 옮겨야 하는 박스의 번호 (0부터 시작) |
| 15 | + boolean[] checked = new boolean[10000]; // 각 박스를 옮겼는지의 여부 |
| 16 | + |
| 17 | + n = sc.nextInt(); |
| 18 | + for (int i = 0; i < n; i++) { |
| 19 | + cranes.add(sc.nextInt()); |
| 20 | + } |
| 21 | + |
| 22 | + m = sc.nextInt(); |
| 23 | + for (int i = 0; i < m; i++) { |
| 24 | + boxes.add(sc.nextInt()); |
| 25 | + } |
| 26 | + |
| 27 | + // 최적의 해를 구해야 하므로, 내림차순 정렬 |
| 28 | + Collections.sort(cranes); |
| 29 | + Collections.sort(boxes); |
| 30 | + Collections.reverse(cranes); |
| 31 | + Collections.reverse(boxes); |
| 32 | + |
| 33 | + |
| 34 | + // 모든 박스를 옮길 수 없는 경우 |
| 35 | + if (cranes.get(0) < boxes.get(0)) { |
| 36 | + System.out.println(-1); |
| 37 | + return; |
| 38 | + } |
| 39 | + |
| 40 | + while (true) { |
| 41 | + if (cnt == m) break; |
| 42 | + // 모든 크레인에 대하여 각각 처리 |
| 43 | + for (int i = 0; i < n; i++) { |
| 44 | + while (positions[i] < m) { |
| 45 | + // 아직 안 옮긴 박스 중에서, 옮길 수 있는 박스를 만날 때까지 반복 |
| 46 | + if (!checked[positions[i]] && cranes.get(i) >= boxes.get(positions[i])) { |
| 47 | + checked[positions[i]] = true; |
| 48 | + positions[i] += 1; |
| 49 | + cnt += 1; |
| 50 | + break; |
| 51 | + } |
| 52 | + positions[i] += 1; |
| 53 | + } |
| 54 | + } |
| 55 | + result += 1; |
| 56 | + } |
| 57 | + |
| 58 | + System.out.println(result); |
| 59 | + } |
| 60 | + |
| 61 | +} |
0 commit comments