https://www.acmicpc.net/problem/13458
각각의 시험장에 총 감독관 1명 혹은 여러 명의 부감독관이 있는데 각 시험장마다 응시생들을 모두 감시해야 한다.
이때, 필요한 감독관 수의 최솟값을 구하는 문제이다.
문제를 읽고 총감독관이 없어도 되는건가? 하고 헷갈렸는데 1명은 있어야 맞는 것 같다.
그러므로 일단 각 시험장에서 총감독관이 감시할 수 있는 B명을 빼준다. 그리고 남은 인원을 부감독관이 감시하면 된다.
남은 인원 / 부감독관이 감시할 수 있는 인원
을 해주었을 때 나머지가 존재 할 수 있으므로 이런 경우에는 1을 더해준다.
이 문제에서 제일 중요한 점은 감독관의 수를 저장해 줄 변수를 long long으로 선언해주어야 한다는 것이다.
- 첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
- 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.
- 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)
범위가 위와 같기 때문에 최악의 경우
B와 C가 1 , N이 1,000,000 , 모든방의 응시자 수 1,000,000 라면
1,000,000 (시험장의 개수) * 1,000,000 (응시자의 수) / (1+1) (b와 C)
가 되므로 int의 범위를 넘어가버리기 때문에 long long으로 선언해주어야 한다.
문제가 어렵지 않음에도 불구하고 정답률이 낮은건 이 부분 때문인 것 같다.
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
|
#include <iostream>
using namespace std;
int n;
int a[1000001];
int b, c;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> b >> c;
//시험장의 개수 만큼 총감독관이 존재한다.
long long ans = n;
for (int i = 0; i < n; i++) {
//총감독이 감시할 수 있는 인원을 제외
a[i] -= b;
//총감독이 i번쨰 시험장의 사람들을 모두 감시할 수 있으면
//부감독관이 더 필요없으므로 넘어간다.
if (a[i] <= 0) continue;
//남은 인원을 부감독관이 감시할 수 있는 수로 나눠서 몇명이 더 필요한지 구한다.
ans += a[i] / c;
//나누어 떨어지지 않는 경우 1명이 더 필요하다.
if (a[i] % c != 0) {
ans += 1;
}
}
cout << ans;
return 0;
}
Colored by Color Scripter
|
'BOJ' 카테고리의 다른 글
[BOJ] 1026. 보물 (0) | 2019.07.06 |
---|---|
[BOJ] 2210. 숫자판 점프 (0) | 2019.07.03 |
[BOJ] 2529. 부등호 (0) | 2019.07.03 |
[BOJ] 1748. 수 이어 쓰기 1 (0) | 2019.07.03 |
[BOJ] 1107. 리모컨 (0) | 2019.07.03 |