Algorithm/Java
[알고리즘_Java] 백준 10872번 팩토리얼 (재귀, 메모이제이션)
Cune
2022. 2. 4. 21:21
<재귀>
-> 함수 여러번 호출 방식
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(fact(N)+"");
bw.flush();
}
public static int fact(int N){
if(N==0){
return 1;
}
return N*fact(N-1);
}
}
<메모이제이션>
-> 배열에 값을 저장해서 호출 방식
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(fact(N)+"");
bw.flush();
}
public static int fact(int N){
if(N==0) {
return 1;
}else{
int arr[] = new int[N+1];
arr[0]=1;
for (int i = 1; i <= N; i++) {
arr[i] = i*arr[i-1];
}
return arr[N];
}
}
}
재귀와 메모이제이션 사용법을 몇번 사용해보니까 어느정도 감이 잡히는 느낌이다. 알고리즘 꽤 재밌을지도...!