public class Main {
public static void main(String[] args) throws Exception {
// 입력 파일에서 읽어오는 경우 (테스트용)
// System.setIn(new FileInputStream("src/input.txt"));
// 표준 입력에서 정수 N을 읽어옴
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
br.close();
// 반복문을 이용한 팩토리얼 계산 (주석 처리됨)
// int result = iteration(N);
// 재귀를 이용한 팩토리얼 계산 (사용 중)
int result = recursion(N);
// DP를 이용한 팩토리얼 계산 (주석 처리됨)
// int result = dp(N);
// 결과 출력
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(Integer.toString(result));
bw.flush();
bw.close();
}
// DP(동적 계획법)를 이용한 팩토리얼 계산 함수
// 이전 계산 결과를 메모이제이션하여 중복 계산을 피함
public static int dp(int n) {
int[] memo = new int[13]; // 0부터 12까지의 팩토리얼 값을 저장할 배열
memo[0] = 1; // 0!은 1로 초기화
memo[1] = 1; // 1!은 1로 초기화
// 2부터 n까지 반복하며 팩토리얼 계산
for (int i = 2; i < memo.length; i++) {
memo[i] = memo[i-1] * i; // i!은 (i-1)! * i로 계산
}
return memo[n]; // n!의 값을 반환
}
// 재귀를 이용한 팩토리얼 계산 함수
public static int recursion(int n) {
// 기저 사례: 0!과 1!은 1
if (n == 0 || n == 1) {
return 1;
}
// 재귀 호출을 통해 팩토리얼 계산
return n * recursion(n - 1);
}
// 반복문을 이용한 팩토리얼 계산 함수
public static int iteration(int n) {
// 0!은 1로 초기화
if (n == 0) {
return 1;
}
int result = 1; // 팩토리얼 계산 결과를 저장할 변수
// 2부터 n까지 반복하며 팩토리얼 계산
for (int i = 2; i <= n; i++) {
result *= i; // result에 i를 곱해나감
}
return result; // n!의 값을 반환
}
}
### BOJ15552 : 빠른 A+B
- BufferReader, BufferWriter를 활용한 빠른 입출력 구현
```java
// package boj15552;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// 파일 읽어오기
// System.setIn(new FileInputStream("src/input.txt"));
// [시간 초과]
// 입력
// Scanner scanner = new Scanner(System.in);
// int T = scanner.nextInt();
// for (int i = 0; i < T; i++) {
// int A = scanner.nextInt();
// int B = scanner.nextInt();
// // 출력
// System.out.println(A + B);
// }
// scanner.close();
// [빠른 입출력]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 0; i < T; i++) {
String[] line = br.readLine().split(" ");
int A = Integer.parseInt(line[0]);
int B = Integer.parseInt(line[1]);
// bw.write에 넣기 전에 문자열 형변환 해줘야 함
// 개행문자(\n, 엔터)도 직접 넣어줘야 함
bw.write(Integer.toString(A + B) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
BOJ25083 : 새싹
-\을 활용한 이스케이프 처리
// package boj25083;
public class Main {
public static void main(String[] args) {
// Java에서 "는 역슬래시를 붙여서 나타내야함
System.out.println(" ,r'\"7");
System.out.println("r`-_ ,' ,/");
// \는 \\로 두 번 붙여야함
System.out.println(" \\. \". L_r'");
System.out.println(" `~\\/");
System.out.println(" |");
System.out.println(" |");
}
}
BOJ10872 : 팩토리얼
import java.io.*;
public class Main { public static void main(String[] args) throws Exception { // 입력 파일에서 읽어오는 경우 (테스트용) // System.setIn(new FileInputStream("src/input.txt"));
}
BOJ25083 : 새싹
-
\
을 활용한 이스케이프 처리