-

[삼성SW테스트] 백준 13458번 - 시험 감독 (정답률 25%) 본문

1-1. 삼성 SW 테스트

[삼성SW테스트] 백준 13458번 - 시험 감독 (정답률 25%)

asdklfjlasdlfkj 2020. 1. 14. 12:15

https://www.acmicpc.net/problem/13458

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

삼성 SW테스트 기출문제다. (유형: 그리디)

이 문제는 각 시험장 마다 정 감독관이 무조건 한 명 배치되어야 하고, 남은 인원이 있으면 부 감독관을 1명 이상 투입해도 되는 상황에서 응시자의 수가 시험실마다 주어졌을 때, 필요한 감독관의 최소 명수를 구하는 문제다.

 

그래서 일단 각 시험실마다 정 감독관을 먼저 고려해주고, 남은 인원이 있다면 부 감독관을 배치하는 순서대로 코딩하면 된다.

 

유의해야할 점은 답을 'long long'으로 해야한다는 것.

 

아래는 소스코드 (124ms / 2s)

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
#include <iostream>
#include <vector>
 
using namespace std;
int N;
long long answer = 0;
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
 
    int B, C;
    cin >> N;
    vector<int> A(N, 0);
    for (int i = 0; i < N; i++){
        cin >> A[i];
    }
    cin >> B >> C;
 
    for (int i = 0; i < N; i++){
        int cur_students = A[i];
        if (cur_students <= B)
        {
            answer++;
            continue;
        }
        answer++;
        int remain = cur_students - B;
        int mok = remain / C;
        int nam = remain % C;
        // C로 나누어 떨어지는 경우.
        if (nam == 0){
            answer += mok;
            continue;
        }
        // C로 나누어 떨어지지 않는 경우
        else{
            answer += (mok + 1);
            continue;
        }
    }
    cout << answer << '\n';
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

Comments