[์ฌ๊ท, ๋ฉ๋ชจ๋ฆฌ์ ์ด์ ] 4. ํผ๋ณด๋์น์์ด
<<ํ์ด>>
ํ์ด 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๋ฌธ์ด ํจ์ฌ ์ข๋ค.
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BFS] 7. ์ด์งํธ๋ฆฌ ๋ ๋ฒจํ์ (0) | 2024.02.02 |
---|---|
[DFS] 6. ๋ถ๋ถ ์งํฉ ๊ตฌํ๊ธฐ (0) | 2024.02.02 |
[DFS] 3. ํฉํ ๋ฆฌ์ผ (0) | 2024.01.29 |
[DFS] 5. ์ด์งํธ๋ฆฌ ์ํ (0) | 2024.01.29 |
[์ฌ๊ทํจ์] 2. ์ด์ง์ ์ถ๋ ฅ (1) | 2024.01.26 |
๋๊ธ