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];
        }
    }
}

재귀와 메모이제이션 사용법을 몇번 사용해보니까 어느정도 감이 잡히는 느낌이다. 알고리즘 꽤 재밌을지도...!