백준 팩토리얼 3

KIMYEONGJUN·2025년 5월 5일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

첫째 줄에 정수 N(0 ≤ N ≤ 100,000)이 주어진다.

내가 이 문제를 보고 생각해본 부분

multiplyRange 함수: 이 함수는 low부터 high까지의 모든 정수를 곱한 결과를 BigInteger로 반환하는 재귀 함수이다.
low > high인 경우는 빈 범위이므로 곱셈 결과인 BigInteger.ONE을 반환한다.
low == high인 경우는 범위에 숫자가 하나만 있으므로 해당 숫자를 BigInteger.valueOf(low)로 변환하여 반환한다.
그 외의 경우, 범위를 중간(mid)으로 나누어 low부터 mid까지의 곱과 mid + 1부터 high까지의 곱을 재귀적으로 계산한 후, 두 결과를 multiply() 메소드를 사용하여 곱한다.
main 함수:
BufferedReader로 정수 N을 입력받는다.
N이 0이면 0!은 1이므로 BigInteger.ONE을 출력한다.
N이 0보다 크면 multiplyRange(1, n) 함수를 호출하여 1부터 N까지의 곱, 즉 N!을 계산하고 그 결과를 출력한다.
BufferedReader 자원을 닫는다.

코드로 구현

package baekjoon.baekjoon_28;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

// 백준 27434번 문제
public class Main1012 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        if(N == 0) {
            System.out.println(BigInteger.ONE);
        } else {
            BigInteger result = multiplyRange(1, N);
            System.out.println(result);
        }

        br.close();
    }

    private static BigInteger multiplyRange(int low, int high) {
        if(low > high) {
            return BigInteger.ONE;
        }

        if(low == high) {
            return BigInteger.valueOf(low);
        }

        int mid = low + (high - low) / 2;
        return multiplyRange(low, mid).multiply(multiplyRange(mid + 1, high));
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글