-
백준 13458 시험 감독Algorithm/구현(Brute force, Back tracking, etc.) 2021. 11. 5. 17:06728x90
- 문제의 풀이법 자체는 쉽지만, 오답률이 높은 이유는 result에 int를 사용해서 일 것이다.
- 시험장이 1,000,000이고 응시생도 1,000,000 이고, 감독가능한 인원이 1,2 와 같은 소수일 경우 필요한 감독관 수는 어마어마하게 많아진다. 따라서 result의 자료형은 8byte 정수 자료형인 long long을 사용한다. int가 양수 21억까지 표현 가능하니 21억 x 2^16 하면 경 단위까지 표현이 가능해서 충분하다.
- 총 감독관이 감독할 수 있는만큼 각 시험장의 인원을 빼주고, 다시 순회하면서 부감독관들이 관찰 가능한 인원들을 활용하여 구해준다. 여기서, 이미 총 감독관 하나로 모든 인원이 감독 가능할 시, arr[i]값이 음수가 될 수 있으므로 예외처리를 해 준다. 시간복잡도는 O(N)
#include <iostream> using namespace std; int arr[1000000]; int main() { int n,b,c; cin >> n; long long answer = n; // 총 감독관 수를 더한다. for (int i = 0; i < n; i++) { cin >> arr[i]; } cin >> b >> c; for (int i = 0; i < n; i++) { arr[i] -= b; } for (int i = 0; i < n; i++) { // 총 감독관이 감독할 수 있는 인원보다 적다면 추가적인 인원이 필요 없으므로 continue if(arr[i] < 0) continue; answer += arr[i] / c; if (arr[i] % c) answer++; } cout << answer << '\n'; return 0; }
'Algorithm > 구현(Brute force, Back tracking, etc.)' 카테고리의 다른 글
백준 14500 테트로미노 (0) 2021.11.09 백준 14499 주사위 굴리기 (0) 2021.11.09 백준 3190 뱀 (0) 2021.11.04 [Codility - Counting Elements] MaxProductOfThree (0) 2021.09.19 [Codility - Counting Elements] GenomicRangeQuery (0) 2021.09.19