Notice
Recent Posts
Recent Comments
Link
복's
[ 백준 - 1676 ] 팩토리얼 0의 개수 본문
728x90
https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
쉽게 생각해서 재귀 함수로 풀었지만 통과되지 못했다.
- 파이썬: Recursion Error
- 자바: 틀렸습니다. (overflow)
표현하기에 큰 수가 나와서 문제였는데 파이썬은 체적으로 처리해주고, 자바의 경우 해당 케이스를 지원하는 클래스가 존재한다.
[ 📌 풀이 ]
- 공통
- 팩토리얼 1 ~ N 까지를 곱해서 구해준다.
- 문자열로 변경 후 뒤에서부터 0의 개수를 구해준다.
- 파이썬
- 파이썬의 경우 큰 수에 대해서 따로 처리해줄 부분이 없어서 위와 같이 풀면 문제 없다.
- 자바
- BigInteger 클래스가 원시 타입으로 표현 불가능한 수에 대해서 표현 해주면서 연산 메소드도 제공해준다.
int 타입으로 하다가 long 타입으로 변경해서 답안 제출했는데 안되서 값을 확인해보니까 (0 <= N <= 500) 엄청나게 큰 수가 나왔다.
[ 📌 코드 - Python ]
"""
# Author : Lee In Bok
# Date : 2023.11.15(Wen)
# Spend Time: 11m 29s
# Runtime : 40 ms
# Memory : 31120 KB
# Algoritm : BigInteger
"""
import sys
N = int(sys.stdin.readline())
temp = 1
for n in range(1, N + 1):
temp *= n
result = str(temp)
cnt = 0
for n in result[::-1]:
if n == '0':
cnt += 1
else:
break
print(cnt)
[ 📌 코드 - Java ]
/**
* Author : Lee In Bok
* Date : 2023.11.15(Wen)
* Spend Time: 11m 29s
* Runtime : 132 ms
* Memory : 14576 KB
* Algoritm : BigInteger
*/
package BaekJoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Q1676_temp {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
BigInteger temp = new BigInteger("1");
int cnt = 0;
for(long i = 1; i <= N; i++){
temp = temp.multiply(BigInteger.valueOf(i));
}
String resultStr = temp.toString();
for(int i = resultStr.length() - 1; i >= 0; i--){
if(resultStr.charAt(i) == '0'){
cnt += 1;
} else {
break;
}
}
System.out.println(cnt);
}
}
[ 📌 결과 - Python & Java ]
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[ 백준 - 9020 ] 골드바흐의 추측 (0) | 2023.12.24 |
---|---|
[ 백준 - 1377 ] 버블 소트 (2) | 2023.11.24 |
[ 백준 - 11286 ] 절대값 힙 (1) | 2023.11.05 |
[ 백준 - 2559 ] 수열 (0) | 2023.11.03 |
[ 백준 - 12891 ] DNA 비밀번호 (2) | 2023.10.29 |