<알고리즘 문제풀이&연습>/[C++] 백준

[백준 13458] 시험 감독

사용자 BlockDMask 2017. 9. 26. 19:12
반응형
  • 안녕하세요.// 오늘도 어김없이 문제를 풀고온 BlockDMask 입니다.

  • 곧 추석이네요 ㅎㅎ 추석때도 전을 먹으며 일일 일문제 하도록 노력해보겠습니다.

0. 제목

  • 백준 13458 시험 감독

  • BOJ 13458 시험 감독

1. 문제 설명


총 N개의 시험장이 있고, 각각의 시험장 마다 응시자 들이 있습니다.


i 번 시험장에 있는 응시자의 수는 Ai 명 입니다.


시험 감독관은 총감독관과 부감독관으로 두 종류가 있습니다.


총 감독관은 한 교실에서 감시 할 수 있는 응시자의 수가 B 명이고,


부감독관은 한 교실에서 감시할 수 있는 응시자의 수가 C 명 입니다.


각각의 시험장에 총감독관은 오직 1명만 있어야 한다.


부감독관은 여러명 있어도 상관없다.



각 시험장 마다 응시생들을 모두 감시해야 합니다.


이때 필요한 감독관 수의 최소값를 구하면 됩니다.



시험장의 개수 N (1<= N <= 1,000,000)



각 시험장의 응시자 수 Ai (1 <= Ai <= 1,000,000)



총감독관 이 감시할 수 있는 응시자의 수 B

부감독관 이 감시할 수 있는 응시자의 수 C

개수 (1 <= B, C <= 1,000,000)


2. 풀이 과정


a. 각각의 시험장에 총감독관이 1명 씩 있어야한다.


=> 모든 시험장에서 총감독관이 감독할 수 있는 응시자의 수를 뺀다.



b. 부감독관은 여러명 있어도 상관없다.


=> 총감독관이 감시 할 수 있는 인원을 뺀 상태의 시험장의 남은 사람이 있을때, 


 부감독관이 감독할 수 있는 경우의 수를 뺀다. (나눴을때 몫으로 구한다.)


딱 떨어지는 경우(나머지가 0인 경우)를 생각해준다.


3. 코드


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
//백준 13458 시험 감독
 
#include<iostream>
#include<cstdio>
 
using namespace std;
 
int main(void){
 
    int n;      //시험장 수
    cin >> n;
 
    int arr[100001];
 
    for(int i=0; i<n; i++){
        scanf("%d"&arr[i]);
    }
 
    int major;  //총감독관이 감독할 수 있는 응시자의 수
    int sub;    //보조감독이 감독할 수 있는 응시자의 수
 
    cin >> major;
    cin >> sub;
 
    long long cnt=0;  //count.
 
    for(int i=0; i<n; i++){
        arr[i] -= major;    //각 방에서 총 감독이 감독할 수를 뺸다
        cnt++;
 
        if(arr[i] > 0) {//총감독이 감독할 수를 뺴면, 보조감독이 몇명 들어갈지 센다.
            if(arr[i] % sub == 0) { //딱 맞는 경우
                cnt += (arr[i] / sub);
            }else{
                cnt += (arr[i] / sub)+1;
            }
        }
    }
 
 
    cout << cnt;
 
    return 0;
}
cs


4. 인증


문제 출처 - https://www.acmicpc.net/problem/13458

감사합니다. 하트 꾹 부탁드립니다.

반응형