안녕하세요.// 오늘도 어김없이 문제를 풀고온 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
감사합니다. 하트 꾹 부탁드립니다.
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[백준 2309] 일곱 난쟁이 (브루트 포스) (0) | 2017.10.06 |
---|---|
[백준 4673] 셀프 넘버 (2) | 2017.10.04 |
[백준 2941] 크로아티아 알파벳 (0) | 2017.10.04 |
[백준 5622] 다이얼 (0) | 2017.10.03 |
[백준 2292] 벌집 (1) | 2017.09.26 |
[백준 1427] 소트인사이드 (2) | 2017.09.23 |
[백준 1316] 그룹 단어 체커 (4) | 2017.09.21 |
[백준 9012] 괄호 (stack) (0) | 2017.09.20 |