백준 13458번 시험감독 (삼성 SW 역량테스트 기출문제)


사용한 알고리즘: 수학...?

어렵지 않았던 문제였던 것 같습니다.
주의 할 점은 '각각의 시험장에 한명의 총감독관이 있어야 한다.' 였습니다.

구하고자하는 감독관 수를 Ans, i번째 시험장의 학생수를 arr[i] 라 놓으면,
이에따라 각 시험장의 학생들 수를 입력받고, 각 시험장별로
(1) arr[i] -= 총감독관이 감독 가능한 학생수 , Ans += 1 ( 총감독관 1명 )
(2) arr[i] %= 부감독관이 감독 가능한 학생수 , Ans += arr[i]/부감독관이 감독가능한 학생수
(3) arr[i] > 0 일때, 즉 과정 (1),(2)를 거친 후 남은 학생이 존재할 경우 Ans+=1 (부감독관 1명)
    (왜냐하면 과정 2 에서 부감독관이 감독 가능한 학생수로 나누어 준 나머지가 남은 것이기 때문에 부감독관 한명이면 커버 가능하다.)

으로 구해주면 됐습니다.


#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
int N, B, C, arr[1000001];
long long ans;
int main(){ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);
cin >> N;
for (int i = 0; i < N; ++i)
cin >> arr[i];
cin >> B >> C;
for (int i = 0; i < N; ++i){
arr[i]-=B;
ans++;
if(arr[i]>0){
ans+=arr[i]/C;
arr[i]%=C;
if(arr[i]>0) ans++;
}
}
cout << ans << '\n';
return 0;
}
view raw BOJ 13458.cpp hosted with ❤ by GitHub


댓글