Post

Recursion, Memoization_ํ”ผ๋ณด๋‚˜์น˜

๐Ÿ”ต ThingsILearned

โœ”๏ธ ๋ฉ”๋ชจ์ด์ œ์ด์…˜

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ,
์ด์ „์— ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•จ์œผ๋กœ์จ ๋™์ผํ•œ ๊ณ„์‚ฐ์˜ ๋ฐ˜๋ณต ์ˆ˜ํ–‰์„ ์ œ๊ฑฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ 
๋™์  ๊ณ„ํš๋ฒ•์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ธฐ์ˆ 

https://soheeparklee.github.io/posts/DS-memoization/

โœ… Recursion, Memoization์„ ์‚ฌ์šฉํ•ด์„œ ํ”ผ๋ณด๋‚˜์น˜ ๋ฐฐ์—ด์„ ์ถœ๋ ฅํ•˜์„ธ์š”

1
2
3
4
//โญ๏ธinput:
//7
//โญ๏ธoutput:
//1 1 2 3 5 8 13

๐ŸŸข ๋‹จ์ˆœ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€๊ธฐ 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Main {
    public int DFS(int n){
        if(n<=1) return n;
        else{
           return DFS(n-2) + DFS(n-1);
        }
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        for(int i=1; i<=n; i++){
            System.out.print(T.DFS(i) + " ");
        }
    }
}

๐ŸŸข ๋‹จ์ˆœ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€๊ธฐ 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Main {
    public int DFS(int n){
        if(n==1) return 1;
        else if(n==2) return 1;
        else{
           return DFS(n-2) + DFS(n-1);
        }
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        for(int i=1; i<=n; i++){
            System.out.print(T.DFS(i) + " ");
        }
    }
}

//โญ๏ธinput:
//7
//โญ๏ธoutput:
//1 1 2 3 5 8 13

แ„แ…ฉแ„ƒแ…ตแ†ผแ„€แ…ฉแ†ผแ„Žแ…ขแ†จ-57

๐Ÿ‘Ž๐Ÿป ์žฌ๊ท€๋งŒ์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ํ•œ๊ณ„

ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ๊ณ„์‚ฐํ•ด์„œ ์ถœ๋ ฅํ•˜๋‹ค๋ณด๋‹ˆ
์ˆซ์ž ํ•˜๋‚˜ ๋‚˜์˜ค๊ณ โ€ฆ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค์Œ ์ˆซ์ž ๋‚˜์˜ค๊ณ โ€ฆ๋˜ ๊ธฐ๋‹ค๋ฆฌ๊ณ โ€ฆ
๋๊นŒ์ง€ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆผ

๐ŸŸข ์žฌ๊ท€ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐฐ์—ด์— ๊ฐ’ ์ €์žฅํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ

๐Ÿ‘๐Ÿป ๋ฐฐ์—ด์— ๊ฐ’ ์ €์žฅํ•˜๋Š” ์ด์œ 

๋ฐฐ์—ด์— ๊ฐ’์„ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœ ์žฌ๊ท€๋งŒ์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋ฆฐํŠธํ•˜๋ฉด
๊ฐ’ ํ•˜๋‚˜ ๋‚˜์˜ค๊ณ โ€ฆ๊ณ„์‚ฐํ•ด์„œ ๋‹ค์Œโ€ฆ๋˜ ๊ณ„์‚ฐํ•ด์„œ ๋‹ค์Œโ€ฆํ•˜๋‹ค๋ณด๋‹ˆ
ํ•˜๋‚˜์˜ ๊ฐ’์„ ์–ป๊ณ  ๊ทธ ๋‹ค์Œ ๊ฐ’์„ ์–ป๊ธฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ.
๋ฐฐ์—ด์— ๋ชจ๋“  ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ํ•œ๋ฒˆ์— ํ”„๋ฆฐํŠธํ•˜๋ฉด,
์ฒ˜์Œ์— ๋ชจ๋“  ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋‚˜
ํ•œ๋ฒˆ์— ๋ชจ๋“  ๊ฐ’์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

๐Ÿ’ก ์ฃผ์˜: ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” n+1

์šฐ๋ฆฌ๋Š” ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ์‚ฌ์šฉํ•˜์ง€๋ฅผ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” ๋ฒ„๋ฆฌ๊ณ , ๋Œ€์‹  n๊ฐœ ๋งŒํผ์˜ ์ž๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ˆ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” n+1

แ„แ…ฉแ„ƒแ…ตแ†ผแ„€แ…ฉแ†ผแ„Žแ…ขแ†จ-57

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Main {
    static int[] fibo; //๋ฐฐ์—ด ์ƒ์„ฑ
    public int DFS(int n){
        if(n==1) return fibo[n]= 1;
        else if(n==2) return fibo[n]= 1;
        else{
           return fibo[n]=  DFS(n-2) + DFS(n-1);
        }
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        fibo= new int[n+1]; //๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” n+1
        T.DFS(n);
        for(int i=1; i<=n; i++){
            System.out.print(fibo[i] + " ");
        }
    }
}


โœ… ๋ฉ”๋ชจ์ด์ œ์ด์…˜๊ณผ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ๋น ๋ฅด๊ฒŒ ํ”ผ๋ณด๋‚˜์น˜ ๊ตฌํ•˜๊ธฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Main {
    static int[] fibo;
    public int DFS(int n){
        //memoization
        //๋ฐฐ์—ด์— ์ด๋ฏธ ๊ณ„์‚ฐํ•ด ๋‘” ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์žˆ์œผ๋ฉด ๊ตณ์ด ๋˜‘๊ฐ™์€ ๊ณ„์‚ฐ์„ ๋‘ ๋ฒˆ ํ•˜์ง€๋Š” ์•Š์Œ
        if(fibo[n] != 0) return fibo[n];

        if(n==1) return fibo[n]= 1;
        else if(n==2) return fibo[n]= 1;
        else{
           return fibo[n]=  DFS(n-2) + DFS(n-1);
        }
    }
    public static void main(String[] args) {
        Main T = new Main();
        Scanner sc= new Scanner(System.in);
        int n= sc.nextInt();
        fibo= new int[n+1]; //์ƒˆ๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด ์ฒ˜์Œ์—๋Š” ๋‹ค 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋จ
        T.DFS(n);
        for(int i=1; i<=n; i++){
            System.out.print(fibo[i] + " ");
        }
    }
}


//โญ๏ธinput:
//7
//โญ๏ธoutput:
//1 1 2 3 5 8 13

๐Ÿ‘๐Ÿป ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉ

n ์ˆซ์ž๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‹œ๊ฐ„์ด ์—„์ฒญ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด n ์ด 45๋ผ๋ฉด, ๊ฐ€์ง€์ณ์„œ ๊ตฌํ•˜๋Š” ํ•ฉ์ด ์—„์ฒญ ๋งŽ์„ ๊ฒƒ์ด๋‹ค.
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•˜๋ฉด ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฐฐ์—ด์— ์ €์žฅํ•˜์˜€์œผ๋‹ˆ,
๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์ „์— ์ด๋ฏธ ๋ฐฐ์—ด์— ๊ณ„์‚ฐํ•ด ๋‘” ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

แ„แ…ฉแ„ƒแ…ตแ†ผแ„€แ…ฉแ†ผแ„Žแ…ขแ†จ-57

This post is licensed under CC BY 4.0 by the author.