백준 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 에서 부감독관이 감독 가능한 학생수로 나누어 준 나머지가 남은 것이기 때문에 부감독관 한명이면 커버 가능하다.)
으로 구해주면 됐습니다.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} |
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!