[Swift] 백준 1676 - 팩토리얼 0의 개수

sun02·2021년 11월 17일
0

알고리즘

목록 보기
20/52

문제 링크

처음 생각한 풀이는 팩토리얼을 구해서 10, 10^2, 10^3..으로 나누려고 했었다.
그래서 그렇게 풀었는데,, 런타임에러가 났다
왜냐하면 문제에서 입력한 N의 범위가 0에서 500이하이기 때문임ㅠ

그래서 다른 방법을 생각해야했다..

뒤에서부터 0의 개수는 10의 배수를 의미하고,
10 = 2 x 5 이므로 이 개수를 알면 되는데
무조건 2가 5보다 많으니까
5의 개수를 알면 -> 10의 개수를 알 수 있고 -> 0의 개수 알 수 있다.

입력받은 수를 n이라고 할 때,
팩토리얼은 1부터 n까지의 곱이므로 이 안에 5, 5^2, 5^3... 로 나눠지는 게 몇 개 있는지 세 면 된다.

풀이 코드

import Foundation

let n = Int(readLine()!)!
var count = 0

for i in 1..<n+1 {
    var num = i
    while num>0, num%5 == 0 {
    	count += 1
        num /= 5
    } 
}

print(count)

다른 풀이

저렇게 for 문으로 돌려도 되지만
N의 범위가 500 이하이기 때문에 나눠지는 5의 n승 값이 5, 25, 125 밖에 없다.

따라서


import Foundation

let n = Int(readLine()!)!

print(n/5 + n/25 + n/125)

이렇게 풀이해도 된다
(다른 분들 풀이 보고 안 방법인데,, 사람들 정말 똑똑하다..!!)

0개의 댓글