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)

  1. factorial(5) = 5 × factorial(4)
  2. factorial(4) = 4 × factorial(3)
  3. factorial(3) = 3 × factorial(2)
  4. factorial(2) = 2 × factorial(1)
  5. factorial(1) = 1 (종료)

이렇게 해서 5 × 4 × 3 × 2 × 1 = 120 계산 완료

반복문 버전 재귀 함수 버전
for문으로 누적 곱 함수가 자기 자신을 다시 호출
상태를 직접 저장 (result) 호출 스택으로 자동 계산
속도 빠름 (스택 안 씀) 코드 간결 (가독성 좋음)

 

  • 종료 조건(n <= 1)을 꼭 써야 무한 재귀를 막을 수 있음.
  • 너무 큰 값이면 스택 오버플로우 에러가 날 수 있으니 주의.



 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

- 팩토리얼 문제는 누적 곱이 핵심임!!

- 재귀함수는 좀 익숙해지면 다시 공부하기..