[C++] 백준 13458 : 시험 감독

Kim Nahyeong·2022년 1월 10일
0

백준

목록 보기
51/157

#include <iostream>
#include <cmath>

int N;
int A[10000001] = {0};
int B, C;

int main(int argc, char **argv){
    scanf("%d",&N);
    for(int i=1; i<=N; i++){
        scanf("%d",&A[i]); // 시험자 수 입력받기
    }
    scanf("%d %d",&B,&C); // 감독 가능 명 수 입력받기

    long long cnt = 0;
    for(int i=1; i<=N; i++){
        A[i] -= B;
        cnt += 1;
        if(A[i] > 0){
            cnt += (int)ceil(A[i] / (double)C);
        }
    }

    printf("%lld", cnt);
    return 0;
}

처음 풀어본 삼성 기출문제. 가장 쉬웠던 브론즈 2에 해당하는 문제였다.

문제를 다 입력받고 수를 센다. 총 감독자는 한 명이기에 총 감독자가 감독할 수 있는 수를 빼고, 나머지를 부감독자가 감독할 수 있는 사람수를 나눠 올림한 수가 바로 부담독자의 수가 된다.

처음에 틀렸습니다가 발생하여 백준 질문을 찾아보았는데

출력값이 최대로 될 때는 B와 C가 모두 1이고, 
N이 1,000,000이며 모든 A의 값들이 1,000,000일 때입니다. 
이 경우, 답이 1,000,000,000,000으로 int 범위를 훨씬 넘습니다. 
bg와 cg의 값을 long int로 해보세요.

다른 답변을 발견했다. cnt의 자료형을 int에서 long long으로 변경하니 맞았음을 확인할 수 있었다.

만약, cmath 헤더를 사용할 수 없었을 경우에라면 나머지가 존재하면 나눈 몫에 +1을 해주면 좋을 것 같다.

0개의 댓글