반응형
[1] 백준 카테고리
단계별로 풀어보기
재귀
1단계 10872번 문제
팩토리얼
https://www.acmicpc.net/problem/10872
[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 문 부분에 그 부분을 구현해 주었다.
반응형
'프로그래밍 > 백준 문제 풀이(자바)' 카테고리의 다른 글
백준 2447번 자바 문제 답/해설(별 찍기 - 10 문제) (0) | 2022.01.04 |
---|---|
백준 10870번 자바 문제 답/해설(피보나치 수 5 문제) (0) | 2022.01.03 |
백준 1002번 자바 문제 답/해설(터렛 문제) (0) | 2022.01.01 |
백준 3053번 자바 문제 답/해설(택시 기하학 문제) (0) | 2021.12.31 |
백준 4153번 자바 문제 답/해설(직각삼각형 문제) (0) | 2021.12.30 |