프로그래밍/백준 문제
[백준 10872번] 팩토리얼 (C언어 and 파이썬) : 시간 초과 오류
대왕휴지
2023. 1. 29. 22:01
https://www.acmicpc.net/problem/10872
10872번: 팩토리얼
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
C언어
#include <stdio.h>
int Factorial(int num);
int main()
{
// 백준 10872번 팩토리얼 문제 - 단계별 풀어보기: 재귀
int num = 0;
scanf("%d", &num);
printf("%d", Factorial(num));
return 0;
}
int Factorial(int num)
{
if (num <= 1)
return 1;
else
return num * Factorial(num - 1);
}
파이썬으로 풀기전 c로 풀어보았다.
근데 계속해서 시간 초과 오류가 생겼다.
나는 if문의 조건을
int Factorial(int num)
{
if(num == 1 && num == 0)
return 1;
else
return num * Factorial(num-1);
}
이렇게 if(num == 1 && num == 0) 해주었다. 당연히 값은 잘 나왔었다. 하지만 시간 차이가 나서 검색을 해보니 팩토리얼 문제에서 시간 초과 오류가 많이 생긴다고 했다.
해결방법
Factorial의 if문의 조건문을 변경했다.
int Factorial(int num)
{
if (num <= 1)
return 1;
else
return num * Factorial(num - 1);
}
근데.. 솔직히 똑같은 조건식인데 왜 시간 차이가 나지..? 모르것다.
파이썬
# -*- coding: utf-8 -*-5
# 백준 10872번 팩토리얼 문제 - 단계별 풀어보기: 재귀
def Factorial(num):
if num <= 1:
return 1
else:
return num * Factorial(num-1)
num = int(input())
print(Factorial(num))