Publish:

ํƒœ๊ทธ: , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

img_3.png

๋ฌธ์ œ

๋ฌธ์ œ ๋งํฌ

img_3.png

ํ’€์ด

img.png

์˜ˆ๋ฅผ๋“ค์–ด n = 5 ์ธ ๊ฒฝ์šฐ ํƒ‘์„ ์˜ฎ๊ธฐ๋ ค๋ฉด ๋จผ์ € ๋งจ ์•„๋ž˜ ์›๋ฐ˜์„ ์ œ์™ธํ•œ (n - 1) ๊ฐœ์˜ ์›๋ฐ˜์„ ์ž„์‹œ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค. ๊ทธ ํ›„ ๋งจ ์•„๋ž˜ ์›๋ฐ˜์„ ๋ชฉ์ ์ง€ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ , ๊ทธ ์œ„๋กœ ์ž„์‹œ ๊ธฐ๋‘ฅ์˜ ์›๋ฐ˜์„ ๋ชจ๋‘ ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.

์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

  1. (n - 1) ๊ฐœ์˜ ์›๋ฐ˜์„ 1๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ 2๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ ,
  2. ์ œ์ผ ํฐ ์›๋ฐ˜์„ 1๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ 3๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๊ณ ,
  3. (n - 1) ๊ฐœ์˜ ์›๋ฐ˜์„ 2๋ฒˆ ๊ธฐ๋‘ฅ์—์„œ 3๋ฒˆ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

img ๋งจ ์•„๋ž˜์ชฝ ์›๋ฐ˜์ด end ์ชฝ์œผ๋กœ ๊ฐ€๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ๋ ๊นŒ? ๋‹ค์Œ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋จผ์ € ๋งจ ์•„๋ž˜ ์›๋ฐ˜์„ ์ œ์™ธํ•œ 4๊ฐœ์˜ ์›๋ฐ˜์„ tmp ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค.

img 4๊ฐœ์˜ ์›๋ฐ˜์„ tmp ๋กœ ์˜ฎ๊ธฐ๊ณ  ๋‚˜๋ฉด ๋‹ค์Œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋งจ ์•„๋ž˜์— ์žˆ๋˜ ์›๋ฐ˜์„ end ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

img ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ณผ์ •๊ณผ ์•ž์œผ๋กœ ์ง„ํ–‰๋  ๊ณผ์ •์„ ์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด

  1. 5๊ฐœ์˜ ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์— 4๊ฐœ์˜ ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์ด ์„ ํ–‰ ๋˜์—ˆ๊ณ ,
  2. ํฐ ์›๋ฐ˜์„ end ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์ด ์ง„ํ–‰๋˜์—ˆ๊ณ ,
  3. ํ˜„์žฌ tmp ์— ์Œ“์—ฌ ์žˆ๋Š” 4๊ฐœ์˜ ์›๋ฐ˜๋“ค์„ ๋‹ค์‹œ end ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

์ฆ‰, n = 5์˜ ๊ณผ์ •์€ n = 4์˜ ๊ณผ์ •์ด ํ•œ๋ฒˆ ์ˆ˜ํ–‰๋œ ๋’ค, ํฐ ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๊ณ , ๋‹ค์‹œ n = 4์˜ ๊ณผ์ •์ด ์ˆ˜ํ–‰๋œ๋‹ค. ๋‹ค๋งŒ ๊ทธ ๊ณผ์ •์—์„œ ์ž‘์—…์ด ์‹œ์ž‘๋  ๊ธฐ๋‘ฅ(start)๊ณผ ์›๋ฐ˜์ด ๋ชจ์ผ ๊ธฐ๋‘ฅ(end)์˜ ์œ„์น˜๋งŒ ๋ณ€๊ฒฝ๋  ๋ฟ์ด๋‹ค.

์•„๋ž˜๋Š” n = 4 ๋ถ€ํ„ฐ 1๊นŒ์ง€์˜ ๋Œ€๋žต์ ์ธ ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. img ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋งจ ์•„๋ž˜ ์›๋ฐ˜์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์›๋ฐ˜๋“ค์„ ๋ชจ๋‘ ์˜ฎ๊ธฐ๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋‘ฅ์ด ์•„๋‹Œ ๊ธฐ๋‘ฅ(end) ์œผ๋กœ ์šฐ์„  ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค img ์ด ๊ณผ์ •์ด n = 1 ์ด ๋ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต ๋œ๋‹ค. img img img img img img img img

์ฝ”๋“œ

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
class Solution {
  int index = 0;
  int[][] answer;

  public int[][] solution(int n) {
    answer = new int[(int) (Math.pow(2, n) - 1)][2];
    hanoi(n, 1, 3, 2);

    return answer;
  }

  void hanoi(int n, int start, int end, int tmp) {
    if (n == 1) {
      record(start, end);
      return;
    }
    hanoi(n-1, start, tmp, end);   // 1
    record(start, end);            // 2
    hanoi(n-1, tmp, end, start);   // 3
  }

  void record(int start, int end) {
    answer[index][0] = start;
    answer[index][1] = end;
    index++;
  }
}
  • ์ฝ”๋“œ์˜ 1๋ฒˆ ๋ถ€๋ถ„์ด ์œ„ 3๋ฒˆ ๊ทธ๋ฆผ์— ํ•ด๋‹นํ•œ๋‹ค. n ์ด 5์ผ๋•Œ ์ฝ”๋“œ์˜ 1๋ฒˆ ๋ถ€๋ถ„์€ 4๋ฒˆ ์‹คํ–‰๋˜๊ณ  tmp ์— 4๊ฐœ์˜ ์›๋ฐ˜์ด ์Œ“์—ฌ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
  • ์ฝ”๋“œ์˜ 2๋ฒˆ ๋ถ€๋ถ„์ด ํฐ ์›๋ฐ˜์„ start ์—์„œ end ๋กœ ์ด๋™ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๋ฐฐ์—ด์— ์‹œ์ž‘ ์œ„์น˜์™€ ๋ ์œ„์น˜๋ฅผ ๊ธฐ๋กํ•ด ๋‘”๋‹ค.
  • ์ฝ”๋“œ์˜ 3๋ฒˆ ๋ถ€๋ถ„์ด tmp ์— ์žˆ๋Š” 4๊ฐœ์˜ ์›๋ฐ˜์„ end ๋กœ ์ด๋™ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. n = 1 ์ด ๋˜๋ฉด 1๊ฐœ์˜ ์›๋ฐ˜๋งŒ ์˜ฎ๊ธฐ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ๋ฐฐ์—ด์— ์ด๋™๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋กํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  answer ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ๊ณง ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜ ์ธ๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

hanoi(n) : n ๊ฐœ์˜ ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๋Š”๋ฐ ํ•„์š”ํ•œ ์ด๋™ ํšŸ์ˆ˜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
hanoi(n) = hanoi(n-1) * 2 + 1

// ์–‘๋ณ€์— + 1
hanoi(n) + 1 = 2 * (hanoi(n-1) + 1)
hanoi(n-1) + 1 = 2 * (hanoi(n-2) + 1)
hanoi(n-2) + 1 = 2 * (hanoi(n-3) + 1)
  ...
hanoi(2) + 1 = 2 * (honoi(1) + 1)

// ์ขŒ๋ณ€๊ณผ ์šฐ๋ณ€์„ ๊ณฑํ•œ๋‹ค.
(hanoi(n) + 1) * (hanoi(n-1) + 1)...(hanoi(2) + 1) = 2^(n-1) * (hanoi(n-1) + 1) * (hanoi(n-2) + 1)...(hanoi(1) + 1)

// ๊ณตํ†ต ๋ถ€๋ถ„ ๋‚˜๋ˆˆ๋‹ค.
(hanoi(n) + 1) = 2^(n-1) * (hanoi(1) + 1)
  
// hanoi(1) = 1 ๋Œ€์ž…
(hanoi(n) + 1) = 2^(n-1) * 2

hanoi(n) = 2^n -1

์ฐธ๊ณ 

๋ฐฉ๋ฌธํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋Œ“๊ธ€,์ง€์ ,ํ”ผ๋“œ๋ฐฑ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜Š

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ