반응형
https://www.acmicpc.net/problem/10872
10872번: 팩토리얼
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
💡 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
in.close();
int sum = factorial(N);
System.out.println(sum);
}
public static int factorial(int N) {
if(N <= 1) return 1; // 재귀 종료조건
return N * factorial(N - 1);
}
}
*참고*
0!은 1이다!
0!의 값이 0인줄 알았는데, 이번 문제를 풀면서 0!이 1이라는 것을 알게 되었다.
그 이유는, !(펙토리얼)은 경우의 수를 나타내는 것이라는 점.
n! = (1부터 n까지의 수로 만들 수 있는 경우의 수)이다.
이때, 0! = (1~0까지의 수로 만들 수 있는 경우의 수)가 되므로 0!은 1이 된다고 보면 쉽게 이해가 될것이다.
N 이 1또는 0이 될때는 return 1을 해주고, 그 외는 N * factorial(N-1); 을 해서 재귀를 구성했다.
사실 아직 재귀가 이해가 안되서 블로그를 보고 코드를 짰는데, factorial 함수가 연산되는 방법은 아래와 같다.
// return N * factorial(N - 1);
6 * factorial(5){
5 * factorial(4){
4 * factorial(3){
3 * factorial(2){
2 * factorial(1){
return 1;
}
return 2 * 1;
}
return 3 * 2 * 1;
}
return 4 * 3 * 2 * 1;
}
return 5 * 4 * 3 * 2 * 1;
}
return 6 * 5 * 4 * 3 * 2 * 1;
🚨
N 의 범위가 0 ~ 12 이기 때문에 int 로도 가능하지만,
13 을 넘어가면 13! = 6227020800 으로 int 형의 범위를 벗어나기 때문에 long 타입으로 해주어야 한다.
이렇게 입력받는 범위를 잘 보고 풀어야한다.
아래 블로그 코드를 보고 공부, 포스팅을 했습니다.
[백준] 10872번 : 팩토리얼 - JAVA [자바]
www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 재귀에 대한 문제를 처음 접할 때 가장 먼저 접하는
st-lab.tistory.com
'개발 > [백준] 브론즈 마스터하기' 카테고리의 다른 글
백준 2750번 _ 수 정렬하기 [자바/java] (0) | 2023.02.02 |
---|---|
백준 10870번 피보나치 수 5 _ java 자바 (0) | 2023.01.30 |
백준 1177번 _ 단어공부 [자바] (0) | 2023.01.26 |
백준 2775번 _ 부녀회장이 될테야 [java] (0) | 2023.01.21 |
백준 10809번 _ 알파벳 찾기 [java] (0) | 2023.01.16 |