2023. 11. 20. 11:15ใ์ธํ๋ฐ/์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ์ ๋ฌธ : ์ฝ๋ฉํ ์คํธ ๋๋น
https://hyejin.tistory.com/1255
-> ์ด์ ๋ฌธ์ ํ์ด
4. ํผ๋ณด๋์น ์ฌ๊ท (๋ฉ๋ชจ์ด์ ์ด์ )
์ค๋ช
1) ํผ๋ณด๋ํค ์์ด์ ์ถ๋ ฅํ๋ค. ํผ๋ณด๋์น ์์ด์ด๋ ์์ 2๊ฐ์ ์๋ฅผ ํฉํ์ฌ ๋ค์ ์ซ์๊ฐ ๋๋ ์์ด์ด๋ค.
2) ์ ๋ ฅ์ ํผ๋ณด๋์น ์์ด์ ์ด ํญ์ ์ ์ด๋ค. ๋ง์ฝ 7์ด ์ ๋ ฅ๋๋ฉด 1 1 2 3 5 8 13์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ ๋ ฅ
์ฒซ ์ค์ ์ด ํญ์ N(3<=N<=45)์ด ์ ๋ ฅ๋๋ค.
์ถ๋ ฅ
์ฒซ ์ค์ ํผ๋ณด๋์น ์์ด์ ์ถ๋ ฅํฉ๋๋ค.
์์ ์ ๋ ฅ 1
10
์์ ์ถ๋ ฅ 1
1 1 2 3 5 8 13 21 34 55
๋ฌธ์ ํ์ด 1
public int DFS(int n)
{
if (n >= 3)
{
return DFS(n - 2) + DFS(n - 1);
}else {
return 1;
}
}
๐ฉ๐ป : ๋๋ ์ฐ์ DFS(10) ์ ๊ฐ์ด 55๋ผ๋ ๊ฒ๊น์ง๋ ๊ตฌํ๋๋ฐ ์ด๊ฑธ ์ด๋ป๊ฒ ์ถ๋ ฅํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ด์.. ์ฌ๊ธฐ๊น์ง๋ง ํด๊ฒฐํ๊ณ ๊ฐ์๋ฅผ ํ์๋ค.. ใ ใ
ํจ์ ์ฌ์ด์ ์ถ๋ ฅ์ ๋๋ฉด ๊ฐ๊ฐ ํจ์ ์ถ๋ ฅํ ๋๋ง๋ค ์ฒ์๋ถํฐ ๋๊น์ง ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์๋ค.
๋ฌธ์ ํ์ด 2
// ๊ฐ์ฌ๋ ํ์ด 1 : for ๋ฌธ์ ํ์ฉํ ํ์ด
public int DFS2(int n)
{
if (n == 1)
return 1;
else if (n == 2)
return 1;
else
return DFS2(n - 2) + DFS2(n - 1);
}
๐พ : ๊ฐ์๋ฅผ ๋ฃ๋๋ฐ ์ฒซ๋ฒ์งธ ํ์ด๋ ๋์ ๋์ผํ๊ฒ ์ด๋ ๊ฒ ์งํํ๊ณ ๋...
long start = System.currentTimeMillis();
System.out.println("== for๋ฌธ ํ์ฉ =="); // ex) n = 45 ์ด๋ค? ๊ทธ๋ผ ์์ฒญ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ค..;; ์ ์ ๋๋ ค์ง (n์ ๊ฐ์ด ์ปค์ง์๋ก ์ค๋ ๊ฑธ๋ฆผ)
for (int i = 1; i <= n; i++)
{
System.out.print(fibonacciSequence.DFS2(i) + " " );
}
long end = System.currentTimeMillis();
System.out.println();
System.out.println("๊ฑธ๋ฆฐ ์๊ฐ : " + (end - start) + "(ms)");
๋ฉ์ธ์์ ์ด๋ ๊ฒ for๋ฌธ์ ๋๋ ค์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค..!
์๋ for๋ฌธ์ ํตํด์ ํด๋ ๋๋์ง ๋ชฐ๋๋ค.. ใ ๋ฌด์กฐ๊ฑด ์ฌ๊ท ํจ์ ๋ด์์ ํด๊ฒฐํด์ผ ํ๋ ์ค...
๊ทผ๋ฐ ๋ฌผ๋ก ์ด๋ ๊ฒ ํ๋ฉด n์ ๊ฐ์ด ์ ์ ๋๋ ๊ธ๋ฐฉ ๋๋์ง๋ง n์ ๊ฐ์ด ์ ์ ์ปค์ง ๊ฒฝ์ฐ์๋ ์๊ฐ์ด ์ ์ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
์์๋ก n = 45 ๋ก ๋๋ ค๋ณด๋๋ฐ ์๊ฐ๋ณด๋ค ์๊ฐ์ด ๊ฝค ๊ฑธ๋ฆฌ๊ธธ๋ ์๊ฐ ์ธก์ ์ ํด๋ดค๋๋ฐ 5์ด๊ฐ ๋๋ ์๊ฐ์ด ๊ฑธ๋ ธ์๋ค.
๊ฑธ๋ฆฐ ์๊ฐ : 5489 ms
๋ฌธ์ ํ์ด 3
static int[] fibo;
public int DFS3(int n)
{
if (n == 1) return fibo[n] =1;
else if (n == 2) return fibo[n] = 1;
else return fibo[n] = DFS3(n-2) + DFS3(n-1);
}
๐พ : ๊ฐ์ฌ๋์ด ํผ ๋๋ฒ์งธ ๋ฐฉ์์ staic ๋ฐฐ์ด์ ํ์ฉํด์ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ด์๋ค.
๋จผ์ static fibo ๋ฐฐ์ด์ ์ ์ธํ๊ณ , n ๊ฐ์ ์ ๋ ฅ๋ฐ์ ๋ ํด๋น ๋ฐฐ์ด์ ์ด๊ธฐํํด์ค ๋ค์,
๋ฐฐ์ด์ DFS(1) = 1 ์ด๋ฉด fibo[1]์ 1 ๊ฐ์ ์ ์ฅํ๊ณ ,... DFS(3) ์ด๋ฉด DFS(1) + DFS(2) ํ ๊ฐ 2๋ฅผ fibo[2]์ 2๋ฅผ ์ ์ฅํ๋ค.
start = System.currentTimeMillis();
fibonacciSequence.DFS3(n);
System.out.println("== static ๋ฐฐ์ด ํ์ฉ (1) ==");
for (int i= 1; i<= n; i++)
{
System.out.print(fibo[i] + " ");
}
end = System.currentTimeMillis();
System.out.println();
System.out.println("๊ฑธ๋ฆฐ ์๊ฐ : " + (end - start) + "(ms)");
์ด๋ ๊ฒ ๋ฐฐ์ด์ ๊ฐ์ ์ ์ฅํด์ค ๋ค์, for๋ฌธ์ ํ์ฉํด์ ํด๋น ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฒซ๋ฒ์งธ ํ์ด๋ณด๋ค๋ ๊ทธ๋๋ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ฆฐ๋ค !
๊ฑธ๋ฆฐ ์๊ฐ : 2443 ms
๋ฌธ์ ํ์ด 4
// ๊ฐ์ฌ๋ ํ์ด 3 : ๋ฉ๋ชจ์ด์ ์ด์
์ ํ์ฉํ ํ์ด (์๊ฐ๋ณต์ก๋๋ฅผ ํ ์ค์ฌ๋ด)
public int DFS4(int n)
{
if (fibo2[n] > 0) {
return fibo2[n];
}
else if (n == 1) {
return fibo2[n] = 1;
}
else if (n == 2) {
return fibo2[n] = 1;
}else {
return fibo2[n] = DFS4(n-2) + DFS4(n-1);
}
}
๐พ : ์ฌ์ค ๋๋ฒ์งธ ํ์ด๋ ์๊ฐ์ ๋ง์ด ์ค์ด๊ธด ํ์ง๋ง ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํจ์ฌ ์ค์ด๋ ๋ฐฉ๋ฒ์ด ์๋ค..!
๊ทธ ๋ฐฉ๋ฒ์ ๋๋ฒ์งธ ํ์ด์ฒ๋ผ ๋จผ์ static ๋ฐฐ์ด์ ์ฌ์ฉํ๋๋ฐ ์ด๋, ๋ฐฐ์ด์ ์ด๋ฏธ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ค๋ฉด ํด๋น ๊ฐ์ ๊ทธ๋ฅ return ํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๊ณ์ ๊ฐ์ ๊ตฌํ๊ณ , ํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด ํ ์ค์ด๋ ๋ค.
๊ฑธ๋ฆฐ์๊ฐ : 1 ms
-> ์ด๋ ๊ฒ ๋ฌดํ ๋ฐ๋ณตํด์ ๊ตฌํด์ผํ๋ ๊ฐ๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์์ ์ด๋ฏธ ํด๋น ๊ฐ์ด ์๋ค ํ๋ฉด ๊ทธ ๊ฐ์ return ํด์ฃผ๋ฉด ์๊ฐ์ด ๋ง์ด ์ค์ด๋ ๋ค !