본문 바로가기

서버 개발

[java] 백준 알고리즘 10872번 팩토리얼 개인 풀이

 

 

 

이번에 알고리즘을 공부하면서

백준 알고리즘을 이용하고 있다.

그중 단계별 풀이로 하나씩 풀어보고 있는데 그중에서 정리를 할만한 문제나 생각 나는 문제를 하나 씩 써보려고 한다.

 

 

10872 문제는 팩토리얼 문제이다

 

문제

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다.

출력

첫째 줄에 N!을 출력한다.

예제 입력 1 복사

10

예제 출력 1 복사

3628800

 

이 문제는 단계가 함수로 되어있다.

 

그래서 우선은 함수로 풀었다 코드는

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;
public class Main {
    public static int p(int x) {
        if(x==1) {
            return 1;
        }else {
            return x*p(--x);
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        System.out.println(p(x));
    }
}
Colored by Color Scripter
cs

 

이렇게 풀면 답이 나오는데 결과는 런타임 오류가 뜬다!

 

 

그래서 이걸 다시 일반적인 반복문을 사용해서 풀면

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.util.*;


public class Main {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        int sum =1;
        for(int i =1 ; i<=x;i++) {
            sum *=i;
        }
        System.out.println(sum);
    }
}


Colored by Color Scripter
cs

 

 

이렇게 풀면 다시 런타임 에러가 뜨지 않고 해결이 된다.

혹시라도 런타임 오류가 왜 뜨는지 아시는분은 댓글을 남겨주면 감사하겠습니다.