프로그래밍/백준 문제

[백준 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))