Skip to content

Commit 94e579f

Browse files
committed
[Silver II] Title: 과자 나눠주기, Time: 1264 ms, Memory: 124300 KB -BaekjoonHub
1 parent 3c0db91 commit 94e579f

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# [Silver II] 과자 나눠주기 - 16401
2+
3+
[문제 링크](https://www.acmicpc.net/problem/16401)
4+
5+
### 성능 요약
6+
7+
메모리: 124300 KB, 시간: 1264 ms
8+
9+
### 분류
10+
11+
이분 탐색, 매개 변수 탐색
12+
13+
### 제출 일자
14+
15+
2024년 12월 16일 13:17:55
16+
17+
### 문제 설명
18+
19+
<p>명절이 되면, 홍익이 집에는 조카들이 놀러 온다. 떼를 쓰는 조카들을 달래기 위해 홍익이는 막대 과자를 하나씩 나눠준다.</p>
20+
21+
<p>조카들이 과자를 먹는 동안은 떼를 쓰지 않기 때문에, 홍익이는 조카들에게 최대한 긴 과자를 나눠주려고 한다.</p>
22+
23+
<p>그런데 나눠준 과자의 길이가 하나라도 다르면 조카끼리 싸움이 일어난다. 따라서 반드시 모든 조카에게 같은 길이의 막대 과자를 나눠주어야 한다.</p>
24+
25+
<p>M명의 조카가 있고 N개의 과자가 있을 때, 조카 1명에게 줄 수 있는 막대 과자의 최대 길이를 구하라.</p>
26+
27+
<p>단, 막대 과자는 길이와 상관없이 여러 조각으로 나눠질 수 있지만, 과자를 하나로 합칠 수는 없다. 단, 막대 과자의 길이는 양의 정수여야 한다.</p>
28+
29+
### 입력
30+
31+
<p>첫째 줄에 조카의 수 M (1 ≤ M ≤ 1,000,000), 과자의 수 N (1 ≤ N ≤ 1,000,000)이 주어진다.</p>
32+
33+
<p>둘째 줄에 과자 N개의 길이 L<sub>1</sub>, L<sub>2</sub>, ..., L<sub>N</sub>이 공백으로 구분되어 주어진다. 과자의 길이는 (1 ≤ L<sub>1</sub>, L<sub>2</sub>, ..., L<sub>N </sub>≤ 1,000,000,000) 를 만족한다.</p>
34+
35+
### 출력
36+
37+
<p>첫째 줄에 조카 1명에게 줄 수 있는 막대 과자의 최대 길이를 출력한다.</p>
38+
39+
<p>단, 모든 조카에게 같은 길이의 막대과자를 나눠줄 수 없다면, 0을 출력한다.</p>
40+
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
public static void main(String[] args) throws IOException {
7+
8+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
9+
StringTokenizer st = new StringTokenizer(br.readLine());
10+
long answer = 0;
11+
int M = Integer.parseInt(st.nextToken());
12+
int N = Integer.parseInt(st.nextToken());
13+
14+
int snack[] = new int[N];
15+
16+
st = new StringTokenizer(br.readLine());
17+
for(int i =0;i <N; i++) {
18+
snack[i] = Integer.parseInt(st.nextToken());
19+
}
20+
Arrays.sort(snack);
21+
22+
long start = 1;
23+
long end = snack[N-1];
24+
while(start<=end) {
25+
26+
long mid = (start + end ) /2;
27+
int count = 0;
28+
for(int i =0; i<N; i++) {
29+
count += snack[i]/mid;
30+
}
31+
32+
if(count >=M) {
33+
answer = Math.max(answer, mid);
34+
start = mid+1;
35+
}
36+
else {
37+
end = mid-1;
38+
}
39+
40+
}
41+
42+
System.out.println(answer);
43+
44+
}
45+
}

0 commit comments

Comments
 (0)