본문 바로가기
코딩테스트_백준풀이

팩토리얼 0의 개수 #1676 c++ 풀이

by wanna_dev 2023. 10. 5.

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<algorithm>
using namespace std;



int count5(int k) {
	int n = k;
	int count = 0;
	
	while (1) {
		if (n < 5)break;
		if (n % 5 != 0) break;
		if (n % 5 == 0)count++;
		n = n / 5;
	}


	return count;
}

int main() {
	
	int n;
	cin >> n;
	int k = n;
	
	int cnt5 = 0; // k == 10,9,8......1
	int cnt2 = 0;
	while (1) {
		if (k < 5)break;
		
		cnt5 += count5(k);
		//cnt2 += count2(k);
		k -= 1;

	}
	//printf("5 : %d  2 : %d\n", cnt5, cnt2);
	int cnt10 = 0;
	cnt10 = cnt5;
	if (n < 5)cnt10 = 0;


	cout <<cnt10 <<endl;
	
	return 0;
}

 

처음 한 생각 : 아 팩토리얼을 구해서, 0의 개수를 세면 되겠구나, 대충 long long int 쓰면 풀리겠지?

마주한 어려움 : 하다보니까 오버플로우가 나고 연산이 제대로 안되는 것 같았다. 

해결 방법 : 그제서야 "생각"이라는걸 하는 나를 바라보면서, 아직 멀었구나 느끼며 

규칙을 찾아서.. 5의 개수를 세면 되겠구나 하고 푼 문제

2의 개수가 항상 5의 개수보다 작은 것 같길래 예외처리 하다가 주석으로 바꿨습니다.

 

 

'코딩테스트_백준풀이' 카테고리의 다른 글

랜선 자르기 #1654 c++ 풀이  (0) 2023.10.06
수 찾기 #1920 c++ 풀이  (0) 2023.10.05
영화감독 숌 #1436 c++ 풀이  (0) 2023.10.04
단어정렬 #1181 c++ 풀이  (1) 2023.10.03
팰린드롬수 #1259 c++ 풀이  (0) 2023.10.03