문제링크 : https://www.acmicpc.net/problem/2792
문제설명
1. 유치원 생 수와 보석의 종류 수가 주어지고 보석의 종류별 숫자가 주어진다.
2. 가장 많은 보석을 가지고있는 유치원생이 가지고있는 보석의수가 질투심의 수치이다.
3. 질투심의 수치가 최소가 되게 보석을 나눠주는 방법을 찾아 최소 질투심의 수치를 출력하라.
알고리즘
1. 이분탐색을 통해 최소 질투심을 찾는다.
2. 처음에 high 를 보석의 종류중 가장많은 갯수로 두고 low = 1로 둔다.
3. 그리고 질투심에 맞게 보석수를 나눠줄수 있으면 high = mid-1 로 두고 아니면 low = mid +1 로두어 이분탐색을
진행한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int N, M;
int color[300001];
bool check(int n) {
int num = 0;
for (int i = 0; i < M; i++) {
int a = color[i] / n;
int b = color[i] % n;
num += a;
if (b) num ++;
}
if (num <= N)return true;
return false;
}
int main() {
cin >> N>>M;
int high=0, low = 1;
for (int i = 0; i < M; i++) {
cin >> color[i];
if (high < color[i])
high = color[i];
}
while (low <= high) {
int mid = (low + high) / 2;
bool pos = true;
if (!check(mid)) pos = false;
//보석이 남지않을때
if (pos) high = mid - 1;
//보석이 남을 때
else low = mid + 1;
}
cout << low;
}
|
cs |
'c++ > 백준' 카테고리의 다른 글
백준 10815번 : 숫자 카드 (0) | 2020.05.27 |
---|---|
백준 1022번: 소용돌이 예쁘게 출력하기 (0) | 2020.05.27 |
백준 3020번: 개똥 벌레 (0) | 2020.05.27 |
백준 10942번 : 팰린드롬? (0) | 2020.05.26 |
백준 1213번 : 팰린드롬 만들기 (0) | 2020.05.26 |