Skip to content

Commit f3bbfa6

Browse files
authored
Merge pull request #312 from AlgorithmWithGod/lkhyun
[20250416] BOJ / G1 / 놀이공원 / 이강현
2 parents e983af8 + 513368a commit f3bbfa6

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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

Comments
 (0)