[C++] 백준 13458 : 시험 감독
#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을 해주면 좋을 것 같다.
Author And Source
이 문제에 관하여([C++] 백준 13458 : 시험 감독), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/C-백준-13458-시험-감독저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)