반응형
수학 문제.
1. 뒤에 붙는 0의 개수는 10이 몇 번 곱해졌는지와 같다.
2. 10을 소인수분해하면 10 = 2 X 5이다.
2. 따라서 N! 을 소인수분해했을 때 min(2의 개수, 5의 개수)가 맨 뒤에 붙는 0의 개수이다.
3. 2의 개수가 5의 개수보다 많을 테니, 5의 개수를 세준다.
1. 뒤에 붙는 0의 개수는 10이 몇 번 곱해졌는지와 같다.
어떤 수의 뒤에 0이 붙으려면 10을 곱해야 한다. 따라서 N! 을 계산할 때 10이 몇 번 곱해졌는지를 세면 된다.
1. 10을 소인수분해하면 10 = 2 X 5이다.
10을 소인수분해하면 2 X 5이다. 따라서 어떤 수에 10을 곱한다는 말은 2와 5를 모두 한 번씩 곱해준다는 말이다.
2. 따라서 N!을 소인수분해했을 때 min(2의 개수, 5의 개수)가 맨 뒤에 붙는 0의 개수이다.
2와 5를 모두 한 번씩 곱해주어야 하므로, min(2의 개수, 5의 개수)만큼 10이 만들어질 것이다.
3. 2의 개수가 5의 개수보다 많을 테니, 5의 개수를 세준다.
2는 짝수마다 계속 나온다. 당연히 5의 개수가 더 적을 테니, 5의 개수를 세주면 된다. 곱해진 5의 개수는 (5의 배수의 개수) + 95^2의 배수의 개수) + (5^3의 배수의 개수) + ... 이렇게 세주면 된다. 그런데 어차피 N ≤ 500이므로 5^3 = 125의 배수까지만 세주면 되기 때문에 그냥 하드코딩해줬다.
let N = Int(readLine()!)!
print(N / 5 + N / 25 + N / 125) // 5의 개수 세기
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 5430번 AC - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.18 |
---|---|
백준 2667번 단지번호붙이기 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.17 |
백준 2178번 미로 탐색 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.16 |
백준 2630번 색종이 만들기 - 스위프트(Swift) 풀이 + 그림 설명 (0) | 2022.01.16 |
백준 1764번 듣보잡 - 스위프트(Swift) 풀이 (0) | 2022.01.16 |
댓글