CODING TEST/baekjoon
#10872 - 팩토리얼
iamyuunzo
2025. 7. 11. 12:44
📌 문제 정보
- 문제 이름 : #10872번 - 팩토리얼
- 문제 링크 : https://www.acmicpc.net/submit/10872
📌 문제 요약
- 핵심 조건: N! 팩토리얼 출력
- 제한: N(0 ≤ N ≤ 12)
📌 최종 정답 및 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int result = 1;
for (int i=N; i>=1; i--) {
result *= i;
}
System.out.print(result);
}
}
<-- 풀이 요약 -->
- 팩토리얼 수학 공식은 알고 있었는데.. 구현 능력 미숙인 것 같다. (누적까지 알았는데 N에다가 자꾸 누적하고 있었음..ㅋㅋ..)
- n! = n x (n-1) x (n-2) .... x 1 이고 i-- 를 써서 구현을 해야겠다 까지 생각했는데 for안에 조건식을 몰랐음.
- 찾아보니 증가든 감소든 상관없었음. 내가 너무 저 식에 꽂혀서 자꾸 i-- 하려면 식을 어떻게 써야하지... 생각만 한듯..
<-- 다른 풀이 요약 -->
// 1 : i++로 쓰는 식
int result = 1;
for (int i = 1; i <= N; i++) {
result *= i;
}
// 2 : 재귀함수 버전
import java.util.Scanner;
public class Main {
// 팩토리얼을 구하는 재귀 함수
public static int factorial(int n) {
if (n <= 1) {
// n이 0이거나 1이면 1을 반환 (종료 조건)
return 1;
}
// 자기 자신을 다시 호출!
return n * factorial(n - 1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int result = factorial(N); // 재귀 함수 호출
System.out.println(result);
}
}
- 1 : i++로 하면 1 * 2 * 3 * ... * N 이런식으로 가면 됨.
- 2 : 재귀함수 방법 : 수학 정의 그대로 코드로 표현 (.. 좀 복잡해보임..)
✅ 동작 흐름
예: factorial(5)
- factorial(5) = 5 × factorial(4)
- factorial(4) = 4 × factorial(3)
- factorial(3) = 3 × factorial(2)
- factorial(2) = 2 × factorial(1)
- factorial(1) = 1 (종료)
이렇게 해서 5 × 4 × 3 × 2 × 1 = 120 계산 완료
| 반복문 버전 | 재귀 함수 버전 |
| for문으로 누적 곱 | 함수가 자기 자신을 다시 호출 |
| 상태를 직접 저장 (result) | 호출 스택으로 자동 계산 |
| 속도 빠름 (스택 안 씀) | 코드 간결 (가독성 좋음) |
- 종료 조건(n <= 1)을 꼭 써야 무한 재귀를 막을 수 있음.
- 너무 큰 값이면 스택 오버플로우 에러가 날 수 있으니 주의.
📌 새로 배운 문법
<-- 이번 문제에서 새로 배운 Java 문법 정리 -->
- 팩토리얼 문제는 누적 곱이 핵심임!!
- 재귀함수는 좀 익숙해지면 다시 공부하기..