본문 바로가기

알고리즘/백준

[13458번] 시험 감독

문제

총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.

감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 방에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 방에서 감시할 수 있는 응시자의 수가 C명이다.

각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.

각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오.

 

문제접근법.

 

1. 예제를 보면, 총 감독관은 항상 있어야 한다.

2. 총 감독관이 감독할 수 있는 인원을 제외한 나머지 인원은 부 감독관이 감독해야 한다.

 

 1번과 2번만 알아도 쉽게 해결할 수 있는 문제이다. 정답 비율이 낮은 이유에 대해서는 아마 자료형때문으로 보인다. 시험장의 개수와 응시자의 수를 곱해보면,  만약에 B와 C가 각각 1이라면 기존의 int 범위를 초과하게 된다. 따라서 자료형을 long long정도로 바꿔주면 쉽게 해결할 수 있다.

 

해설코드(C++).

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
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
 
int N;
long long A[1000001];
long long B, C;
long long answer = 0;
 
int main(void) {
   freopen("input.txt""r", stdin);
    cin >> N;
    for (int i = 1; i <= N; i++) {
        cin >> A[i];
    }
 
    cin >> B >> C;
 
    // Cal
    for (int i = 1; i <= N; i++) {
        A[i] -= B;
        answer += 1;
        if (A[i] > 0) {
            int temp = A[i] / C;
            A[i] -= (temp * C);
            answer += temp;
            if (A[i] > 0) {
                answer += 1;
            }
        }
    }
 
    cout << answer << endl;
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

'알고리즘 > 백준' 카테고리의 다른 글

[17142번] 연구소 3  (0) 2019.10.13
[17140번] 이차원 배열과 연산  (0) 2019.10.13
[14500번] 테크로미노  (0) 2019.10.12
[15684번] 사다리 조작  (0) 2019.10.12
[12100번] 2048 (Easy) (삼성코딩테스트)  (0) 2019.10.09