์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ํ”ผ๋ณด๋‚˜์น˜ ์žฌ๊ท€ (๋ฉ”๋ชจ์ด์ œ์ด์…˜)

2023. 11. 20. 11:15ใ†์ธํ”„๋Ÿฐ/์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ž…๋ฌธ : ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„

728x90

 

 

https://hyejin.tistory.com/1255

 

์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ํŒฉํ† ๋ฆฌ์–ผ

https://hyejin.tistory.com/1254 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ์ดˆ) : ์ด์ง„์ˆ˜ ์ถœ๋ ฅ https://hyejin.tistory.com/1252 ์ž๋ฐ” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด ์ž…๋ฌธ. ch07. Recursive, Tree, Graph(DFS, BFS ๊ธฐ

hyejin.tistory.com

-> ์ด์ „ ๋ฌธ์ œ ํ’€์ด 

 

 

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 ํ•ด์ฃผ๋ฉด ์‹œ๊ฐ„์ด ๋งŽ์ด ์ค„์–ด๋“ ๋‹ค ! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90