[백준] 10872. 팩토리얼 / 27433. 팩토리얼 2

진예·2023년 11월 5일
0

Baekjoon : JAVA

목록 보기
60/76
post-thumbnail

📌 문제 : 1

[10872] 팩토리얼

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

⬇️ 입력

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

⬆️ 출력

첫째 줄에 N!을 출력한다.

💡 코드 : 1

n 팩토리얼 (n!)이란 n * (n-1) * (n-2) * ... * 1 이므로 for문을 통해 1부터 n까지 곱해주면 되는 간단한 문제!

import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		int result = 1;
		
		if(n == 0) {
			bw.write(result + ""); bw.close();
			return;
		}
		
		for(int i=2;i<=n;i++)
			result *= i;
		bw.write(result + "");

		br.close();
		bw.close();
	}
}	

(아래 : for문 / 위 : 재귀 함수) : 재귀함수 코드는 아래 문제에서도 사용함!


📌 문제 : 2

[27433] 팩토리얼 2

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

⬇️ 입력

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

⬆️ 출력

첫째 줄에 N!을 출력한다.

💡 코드 : 2

✅ for문 대신 재귀 함수를 사용하여 팩토리얼을 구현할 수 있다!

메서드 factorial(int)는 입력받은 nfactorial(n-1)호출하여 곱하고, factorial(n-1)은 입력받은 n-1factorial(n-2)호출하여 곱한다. 이 과정을 계속 반복하다가 호출된 함수factorial(1)이 되면 1을 반환하여 순서대로 거슬러 올라가 최종 값을 구할 수 있다. n0인 경우 역시 재귀 함수를 호출하지 않고 바로 1을 반환하면 된다.

위 문제와 달리 n의 범위가 20까지인데, 20!2,432,902,008,176,640,000으로 int형 범위를 초과하므로 결과를 long 타입으로 반환해야 한다!

import java.io.*;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int n = Integer.parseInt(br.readLine());
		bw.write(factorial(n) + "");
		
		br.close();
		bw.close();
	}
	
	static long factorial(int n) {
		if(n <= 1) return 1;
		return n * factorial(n-1);
	}
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다

0개의 댓글