Machineboy空
3474 : 교수가 된 현우 - 소인수 분해, ios_base::sync_with_studio(false);cin.tie(NULL);cout.tie(NULL) 본문
Computer/Coding Test
3474 : 교수가 된 현우 - 소인수 분해, ios_base::sync_with_studio(false);cin.tie(NULL);cout.tie(NULL)
안녕도라 2024. 2. 15. 17:30https://www.acmicpc.net/problem/3474
3474번: 교수가 된 현우
첫째 줄에 테스트 케이스의 개수 T가 주어지고, 이어서 T개의 줄에 정수 N이 주어진다(1 <= N <= 1000000000).
www.acmicpc.net
문제요약
펙토리얼 값 마지막에 0이 몇 개 등장하는지
난이도
Silver 3
풀이 포인트
- 소인수
- ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
- ios_base::sync_with_stdio(false)
- 표준 stream과의 동기화를 끊는다. cin과 cout이 scanf,prinf에 비해 속도가 느린데, 동기화를 끊어 사용하는 버퍼의 수를 줄여 실행 속도를 높일 수 있음
- 근데 오류를 야기하기도 하나 보다.. 입출력이 제일 어렵군
- cin.tie(NULL);cout.tie(NULL);
- 묶여 있는 것을 풀어줌. 정확히 어떤 원리인지 깊숙히는 이해할 수 없으나 이것도 실행 속도 높이는 방법
- ios_base::sync_with_stdio(false)
*버퍼 : 데이터를 내보내거나 받아들이기 전에 임시로 저장하는 것.즉, 입력을 받고 버퍼에 저장했다가 다시 꺼내 쓰는 방식인데 이런 중간과정을 위 코드등을 통해 생략하는 것임.
REVIEW
오히려 이런 수학적 문제(?)는 접근이 어렵진 않다.
끝자리가 0이 나오려면 소인수 2와 5의 쌍이 있어야 한다.
소인수 2의 개수가, 5의 개수보다 확연히 많을 것이기 때문에 5의 개수만 체크해 준다.
다 구현해두고 시간초과가 떠서,
분할 정복이니, 구간합이니 별 걸 생각했는데 참.
ios::sync_with_stdio , cin.tie , cout.tie 때문에 시간초과가 났다.
앞으로 디폴트로 적어두자.
CODE
#include <bits/stdc++.h>
using namespace std;
// 시간초과
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
int fiveCnt = 0;
for(int i = 0; i < n; i++){
int k;
cin >> k;
fiveCnt = k/5; //첫 5의 배수 카운트를 따로 해주지 않고 아래 반복에 끼워넣으면 오답이더라.. 왜인진 분석해보기
for(int j = 25; j <=k; j*=5){
fiveCnt += k/j;
}
cout << fiveCnt <<'\n';
}
}
'Computer > Coding Test' 카테고리의 다른 글
9012 : 괄호 - stack, 그리디 알고리즘, getline(cin,s) (0) | 2024.02.16 |
---|---|
1436 : 영화감독 숌 - 숫자, 문자 변환 / 브루트 포스 (0) | 2024.02.16 |
10709 : 기상캐스터 - if 조건부 구성 (2) | 2024.02.15 |
2870 : 수학숙제 - stoi, 문자열기반 숫자 대소비교, custom operator (1) | 2024.02.15 |
4659 : 비밀번호 발음하기 - 플래그 (1) | 2024.02.15 |