🍧 μ½”λ”©ν…ŒμŠ€νŠΈ

[μΈν”„λŸ° C++] 28. N!μ—μ„œ 0의 갯수

peewoong 2024. 4. 23. 20:14

🍧 문제

μžμ—°μˆ˜ N이 μž…λ ₯되면 N! κ°’μ—μ„œ 일의 μžλ¦¬λΆ€ν„° μ—°μ†μ μœΌλ‘œ 0이 λͺ‡ 개 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

λ§Œμ•½, 5! = 120 = 일의 μžλ¦¬λΆ€ν„° 연속적인 0의 κ°―μˆ˜λŠ” 1κ°œμ΄λ‹€.

λ§Œμ•½, 12! = 479001600으둜 일의 μžλ¦¬λΆ€ν„° 연속적인 0의 κ°―μˆ˜λŠ” 2κ°œμ΄λ‹€.

 

🍧 μž…λ ₯

12

 

🍧 좜λ ₯

2

 

🍧 1트 (κ°•μ˜ 풀이)

10이 μ–Όλ§ˆλ‚˜ μžˆλŠ”κ°€? λ₯Ό ν™•μΈν•˜λ©΄ λœλ‹€. πŸ‘‰ 10 = 2 * 5 μ΄λ―€λ‘œ, 값을 μ†ŒμΈμˆ˜λΆ„ν•΄ν•˜μ—¬ 2와 5의 갯수λ₯Ό ν™•μΈν•œλ‹€.

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

int main(void){
	//freopen("input.txt", "rt", stdin);
	
	int n, j, tmp;
	int cnt1 = 0, cnt2 = 0;
	cin >> n;
	for(int i = 2; i <= n; ++i){
		tmp = i;
		j = 2;
		
		while(true){
			if(tmp % j == 0){
				if(j == 2){
					cnt1++;
				}
				else if(j == 5){
					cnt2++;
				}
				
				tmp = tmp / j;
			}
			else{
				j++;
			}
			
			if(tmp == 1) break;
		}
	}
	
	if(cnt1 < cnt2){
		cout << cnt1;
	}
	else{
		cout << cnt2;
	}
	
	return 0;
}