팩토리얼 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 256 MB | 134960 | 70607 | 57896 | 52.571% |
문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
출력
첫째 줄에 N!을 출력한다.
예제 입력 1 복사
10
예제 출력 1 복사
3628800
예제 입력 2 복사
0
예제 출력 2 복사
1
풀이
반복문을 이용하여 풀었다.
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(br.readLine());
int sum =1;
for (int i = 1; i <= n; i++) {
sum *= i;
}
bw.write(sum+"");
bw.flush();
bw.close();
}
}
하지만
이 문제는 재귀의 튜토리얼 같은 문제이므로
재귀를 이용해서 풀어보자.
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int n = Integer.parseInt(br.readLine());
bw.write(factorial(n)+"\n");
bw.flush();
bw.close();
}
static int factorial(int n) {
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
}
n이 6일때
6! -> 6 * 5! 이고
5! -> 5* 4! 이런식
// 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;
이렇게 동작한다.
[백준] 10872번 : 팩토리얼 - JAVA [자바]
www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 문제 재귀에 대한 문제를 처음 접할 때 가장 먼저 접하는
st-lab.tistory.com
개념 정리
[Java] 재귀 [미완]
자신을 정의할 때 자기 자신을 재 참조하는 방법을 재귀라고 한다. 이런식으로 func()라는 메소드를 정의할때 func 메소드안에 func을 호출하고 그 호출 한 func 안에 func을 참조하는, 이러한 방법이
keeeeeepgoing.tistory.com
'자바 > 알고리즘 문제 풀이' 카테고리의 다른 글
백준/25501 재귀의 귀재 (0) | 2022.12.05 |
---|---|
백준/10870 피보나치 수 5 (0) | 2022.12.05 |
백준/10814 나이순 정렬 (0) | 2022.12.05 |
백준/1181 단어 정렬 (0) | 2022.12.05 |
백준/11651 좌표 정렬하기 2 (1) | 2022.12.05 |
댓글