|
| 1 | +```java |
| 2 | +import java.util.*; |
| 3 | +import java.io.*; |
| 4 | + |
| 5 | +public class Main { |
| 6 | + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); |
| 7 | + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); |
| 8 | + static StringTokenizer st; |
| 9 | + static int N; |
| 10 | + static int M; |
| 11 | + static int[] ride; |
| 12 | + |
| 13 | + public static void main(String[] args) throws Exception { |
| 14 | + st = new StringTokenizer(br.readLine()); |
| 15 | + N = Integer.parseInt(st.nextToken()); |
| 16 | + M = Integer.parseInt(st.nextToken()); |
| 17 | + ride = new int[M + 1]; |
| 18 | + |
| 19 | + st = new StringTokenizer(br.readLine()); |
| 20 | + for (int i = 1; i <= M; i++) { |
| 21 | + ride[i] = Integer.parseInt(st.nextToken()); |
| 22 | + } |
| 23 | + |
| 24 | + long minTime = search(0, (long) N * 30); // 놀이기구에 있는 아이까지 포함해서 N이상인 시간임. |
| 25 | + minTime--;// 여기서 1을 빼면 새로운 애들이 아직 못탄 상태임. |
| 26 | + |
| 27 | + // N이 7일때 minTime-1 에서는 5명이 탔다고 가정하면 이때 빈곳에 다음 시간에 애들이 타서 7명이상이 된거지. |
| 28 | + long cnt = 0; |
| 29 | + for (int i = 1; i <= M; i++) { // 여기서 minTime-1에서 탔거나 타고 있는 애들 수를 셈 |
| 30 | + cnt += minTime / ride[i]; |
| 31 | + if (minTime % ride[i] != 0) |
| 32 | + cnt++; |
| 33 | + } |
| 34 | + cnt = N - cnt;// 그걸 전체에서 뺌. 그럼 다음 턴에 최소한 타야할 애들 수가 나옴. |
| 35 | + |
| 36 | + for (int i = 1; i <= M; i++) { |
| 37 | + if (minTime % ride[i] == 0) {// 앞에서부터 세서 나머지가 0이면 다음 시간에 바로 애들을 태울 수 있으니 |
| 38 | + if (--cnt == 0) {// 타야할 애들이 다 타는 그 시점 |
| 39 | + bw.write(i + ""); |
| 40 | + break; |
| 41 | + } |
| 42 | + } |
| 43 | + } |
| 44 | + |
| 45 | + bw.close(); |
| 46 | + } |
| 47 | + |
| 48 | + public static long search(long start, long end) { |
| 49 | + long l = start; |
| 50 | + long r = end; |
| 51 | + while (l < r) { |
| 52 | + long mid = (l + r) / 2; // 제한 시간 |
| 53 | + long temp = 0; |
| 54 | + |
| 55 | + for (int i = 1; i <= M; i++) { // 놀이기구마다 mid 시간동안 태울 수 있는 아이의 수를 구함 |
| 56 | + temp += mid / ride[i]; |
| 57 | + if (mid % ride[i] != 0) // 놀이기구에서 아직 내리지 않은 아이도 셈 |
| 58 | + temp++; |
| 59 | + } |
| 60 | + |
| 61 | + if (temp < N) {// N명 다 처리 못함. |
| 62 | + l = mid + 1; |
| 63 | + } else { |
| 64 | + r = mid; |
| 65 | + } |
| 66 | + } |
| 67 | + return l; |
| 68 | + } |
| 69 | +} |
| 70 | + |
| 71 | + |
| 72 | + |
| 73 | +``` |
0 commit comments