꾸르꾸르

[BOJ] 13458번 시험감독 풀이 (C++) 본문

코딩, 알고리즘, 문제풀이/BOJ 백준

[BOJ] 13458번 시험감독 풀이 (C++)

GGUGGU- 2019. 5. 13. 21:10

2017.10.6에 작성된 글입니다


문제링크

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

 

풀이방법

int 의 범위를 생각해야하는 문제

int의 범위는 -20억 ~ 20억! 따라서 long long 으로 접근해야함.

자세한 내용은 코드에 달린 주석을 참고!

 

소스코드

#include <iostream>
 
using namespace std;
 
int main()
{
    int N;
    int A[1000000];
    int B, C;
    long long Answer = 0;//만약 각 시험장마다 부감독관이 1,000,000명이고 모든 시험장이 1,000,000이라면
                         //1,000,000,000,000명의 부감독관 -> int 범위를 넘어선다! 따라서 long long 으로 선언!
 
    cin >> N;
    for (int i = 0; i < N; i++)
        cin >> A[i];//i번 시험장에 있는 응시자의 수
    cin >> B;//총감독관이 한방에서 감시할 수 있는 응시자의 수 B명
    cin >> C;//부감독관이 한방에서 감시할 수 있는 응시자의 수 C명
    for (int i = 0; i < N; i++) {
        A[i] -= B;//응시자의수 - 총감독관이 감시할 수 있는 응시자의 수
        Answer++;//총감독관 1명
        if (A[i] > 0) {//아직도 감시할 응시자가 남아있다면
            Answer += A[i] / C;//부감독관 배정
            if (A[i] % C > 0)
                Answer++;
        }
    }
    cout << Answer << endl;
 
    return 0;
}
Comments