본문 바로가기
프로그래밍/백준 문제 풀이(자바)

백준 10872번 자바 문제 답/해설(팩토리얼 문제)

by 리드민 2022. 1. 2.
반응형

[1] 백준 카테고리
단계별로 풀어보기

재귀

1단계 10872번 문제

팩토리얼

https://www.acmicpc.net/problem/10872

 

10872번: 팩토리얼

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

www.acmicpc.net

 

[2] 문제

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

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

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

3. 예제 입력 1
10


4. 예제 출력 1

3628800

 

5. 예제 입력 2

0

 

6. 예제 출력 2

1


[3] 정답
1. 정답 해설 미포함

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Main {	
	public static int N;
	public static void main(String[] args) throws NumberFormatException, IOException{
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		 
		N = Integer.parseInt(st.nextToken());

		fac();
	}

	public static void fac() {
		int effect=1;
		if(N==0) {
			System.out.println("1");
		}
		else {
		for(int i=1; i<=N;  i++) {
			effect = effect*i;
		}
			System.out.println(effect);
		}
	}
}


2. 정답 해설 포함

import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 import 한다.
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다.*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReader를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamReader 클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException를 사용한다.
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/
import java.util.StringTokenizer;
/* 공백 단위로 호출하기 위해서 StringTokenizer를 사용한다
StringTokenizer를 사용하기 위해서
StringTokenizer java.util.String 클래스를 import 한다.*/

public class Main {	
// 접근제어자 public으로 Main 클래스를 선언한다.
	public static int N;
	// 접근제어자 public으로 메모리에 상주하게 int형 변수 N를 선언한다.
	public static void main(String[] args) throws NumberFormatException, IOException{
	/* 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 main 함수를 선언한다.
	예외처리로 NumberFormatException, IOException를 포함한다.*/
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// BufferedReader 객체 br를 선언한다
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// String 객체 st를 선언한다 이제 공백으로 값을 입력받을 수 있다.
		
		N = Integer.parseInt(st.nextToken());
		// 변수 N에 값을 공백 단위로 구분해서 입력받는다.

		fac();
		// 함수 fac()를 호출한다.
	}
	public static void fac() {
	// 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 함수 fac()를 선언한다.
		int effect=1;
		// int형 변수 effect를 선언한후 값 1를 저장한다.
		if(N==0) {
		// if문를 선언한다 변수 N값이 0일 경우 괄호안에 코드가 실행되게 된다.
			System.out.println("1");
			// 1를 출력한다.
		}
		else {
		for(int i=1; i<=N;  i++) {
		// for문을 선언한다. i가 1~N까지 괄호안의 코드가 반복된다.
			effect = effect*i;
			// 변수 effect에 effect*i한 값을 저장한다.
		}
			System.out.println(effect);
			// 값 effect를 출력한다.
		}
	}
}

 

팩토리얼은 1부터 n까지 계속 곱한 값을 출력하는 것이다. 1!이면 = 1, 2!이면 1*2, 3!이면 1*2*3, 4!이면 1*2*3*4이다. 이를 코드로 표현하면 다음과 같다.

	public static void fac() {
		int effect=1;
		if(N==0) {
			System.out.println("1");
		}
		else {
		for(int i=1; i<=N;  i++) {
			effect = effect*i;
		}
			System.out.println(effect);
		}
	}

N이 0이면 N!은 1이므로 그부분을 if문으로 분리해주고 그렇지 않은 경우에는 1*...*(N-2)*(N-1)*N 부분을 코드로 구현해 주면 된다. else 문 부분에 그 부분을 구현해 주었다.

반응형