๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[์žฌ๊ท€, ๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜] 4. ํ”ผ๋ณด๋‚˜์น˜์ˆ˜์—ด

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 2. 1.

<<ํ’€์ด>>

 

ํ’€์ด 1

: ์ด ํ’€์ด๋Š” i ๊ฐ’์ด ๋ณ€ํ• ๋•Œ ๋งˆ๋‹ค DFS๊ฐ€ ๋Œ๋ฉด์„œ ํ”ผ๋ณด๋‚˜์น˜์ˆ˜์—ด์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— n์˜ ์ˆซ์ž๊ฐ€ ์ž‘์„๋•Œ๋Š” ์ฒด๊ฐ์„ ๋ชปํ•˜์ง€๋งŒ, n ๊ฐ’์ด ์˜ˆ๋ฅผ๋“ค์–ด 45์ด๋ฉด ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค๊ธฐ ๊นŒ์ง€ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค.

import java.util.*;

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();
        int n = 7;
        for(int i = 1; i <= n; i++) System.out.println(T.DFS(i) + " ");
    }
}

 

 

 

ํ’€์ด2

: ์œ„์˜ ํ’€์ด 1 ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•ด์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ธ ํ’€์ด์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด n ์ด 10์ธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ˜•ํƒœ์ƒ n = 10์„ ๋„ฃ์–ด์ฃผ๋ฉด ์ด๋ฏธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ํ•œ ๋ฒˆ ์™„์„ฑ์ด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ฐฐ์—ด์— ๋„ฃ์–ด๋‘๊ณ  ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ํ’€์ด 1์ฒ˜๋Ÿผ ํ–ˆ๋˜ ๊ณผ์ •์„ n = 10์„ ๋„ฃ์–ด์คŒ์œผ๋กœ์จ i ๊ฐ’์— ๋”ฐ๋ฅธ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง„๋‹ค. 

import java.util.*;

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();
        int n = 45;
        fibo = new int[n + 1];
        T.DFS(n);
        for(int i = 1; i <= n; i++) System.out.println(fibo[i] + " ");
    }
}

*๊ฐ™์€ ํด๋ž˜์Šค์˜ static์€ ๋ฉ”์„œ๋“œ ๋˜๋Š” ํ•„๋“œ ๊ทธ ์ž์ฒด๋กœ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ผ๋ฐ˜์ ์œผ๋กœ๋Š” static์ด ์•„๋‹ˆ๋ฉด static๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค.)

 

 

ํ’€์ด3(*๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜)

: ์šฐ์„  ์ด ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋ฉด ํ’€์ด 2 ๋ณด๋‹ค ์›”๋“ฑํžˆ ๋น ๋ฅด๋‹ค. ์ด๋Š” ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๊ทธ ๊ฐ’์„ ์ €์žฅํ•ด๋‘๋‹ค๊ฐ€, ๊ทธ ๊ฐ’์„  ํ•œ ๋ฒˆ ๋” ๊ตฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ๋‹ค์‹œ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

์ด๋ฅผ ํ’€์ด 2์—์„œ  if(fibo[n] > 0) return fibo[n];์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๋‹ค.  ์ด๋ฅผ ์šฐ๋ฆฌ๋Š” "๋ฉ”๋ชจ๋ฆฌ์ œ์ด์…˜" ์ด๋ผ๊ณ  ํ•œ๋‹ค.

import java.util.*;

class Main {
    static int[] fibo;
    public int DFS(int n) {
        if(fibo[n] > 0) return fibo[n]; //fibo ๋ฐฐ์—ด์˜ ๊ธฐ๋ณธ ๋””ํดํŠธ ๊ฐ’์€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— '> 0'์œผ๋กœ ๋น„๊ตํ•˜์—ฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
        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();
        int n = 45;
        fibo = new int[n + 1];
        T.DFS(n);
        for(int i = 1; i <= n; i++) System.out.println(fibo[i] + " ");
    }
}

 

 

 

<<์ถ”๊ฐ€ ๊ณต๋ถ€>>

 

for๋ฌธ vs ์žฌ๊ท€ํ•จ์ˆ˜(Stack ํ”„๋ž˜์ž„)

 

=> for๋ฌธ์ด ํ›จ์”ฌ ์ข‹๋‹ค. ์šฐ์„  for๋ฌธ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” Stack์ด ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜์–ด ์ž‘๋™ํ•˜์ง€๋งŒ, ์žฌ๊ท€ํ•จ์ˆ˜๋Š” Stack ์ด ์—ฌ๋Ÿฌ๊ฐœ ์Œ“์ด๊ณ  ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋‚ ๋ฆฌ๋Š” ํ˜•์‹์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ€๋ถ„์—์„œ for๋ฌธ์ด ํ›จ์”ฌ ์ข‹๋‹ค.

๋Œ“๊ธ€