๊ธ€ ์ž‘์„ฑ์ž: ๋˜ฅํด๋ฒ .
๋ฐ˜์‘ํ˜•
ํ•ด๋‹น ๊ธ€์˜ ๋‚ด์šฉ์€ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹Œ ๊ธ€์“ด์ด์˜ ์ฃผ๊ด€์ ์ธ ํ’€์ด์ž…๋‹ˆ๋‹ค. ๋” ์ข‹์€ ํ’€์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค(__)

 

๋งํฌ


https://www.acmicpc.net/problem/11729

 

11729๋ฒˆ: ํ•˜๋…ธ์ด ํƒ‘ ์ด๋™ ์ˆœ์„œ

์„ธ ๊ฐœ์˜ ์žฅ๋Œ€๊ฐ€ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—๋Š” ๋ฐ˜๊ฒฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›ํŒ์ด ์Œ“์—ฌ ์žˆ๋‹ค. ๊ฐ ์›ํŒ์€ ๋ฐ˜๊ฒฝ์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ์žˆ๋‹ค. ์ด์ œ ์ˆ˜๋„์Šน๋“ค์ด ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—์„œ ์„ธ ๋ฒˆ์งธ ์žฅ๋Œ€๋กœ

www.acmicpc.net

 

 

 

๋ฌธ์ œ ์„ค๋ช…


 ์„ธ ๊ฐœ์˜ ์žฅ๋Œ€๊ฐ€ ์žˆ๊ณ  ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—๋Š” ๋ฐ˜๊ฒฝ์ด ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›ํŒ์ด ์Œ“์—ฌ ์žˆ๋‹ค. ๊ฐ ์›ํŒ์€ ๋ฐ˜๊ฒฝ์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์Œ“์—ฌ์žˆ๋‹ค. ์ด์ œ ์ˆ˜๋„์Šน๋“ค์ด ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์—์„œ ์„ธ ๋ฒˆ์งธ ์žฅ๋Œ€๋กœ ์˜ฎ๊ธฐ๋ ค ํ•œ๋‹ค.

  1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์›ํŒ๋งŒ์„ ๋‹ค๋ฅธ ํƒ‘์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  2. ์Œ“์•„ ๋†“์€ ์›ํŒ์€ ํ•ญ์ƒ ์œ„์˜ ๊ฒƒ์ด ์•„๋ž˜์˜ ๊ฒƒ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค.

 ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ด๋™ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ๋‹จ, ์ด๋™ ํšŸ์ˆ˜๋Š” ์ตœ์†Œ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์€ ์›ํŒ์ด 5๊ฐœ์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ด๋‹ค.

 

 

 

์ œํ•œ ์กฐ๊ฑด


 ์ž…๋ ฅ: ์ฒซ์งธ ์ค„์— ์ฒซ ๋ฒˆ์งธ ์žฅ๋Œ€์— ์Œ“์ธ ์›ํŒ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค.

 ์ถœ๋ ฅ: ์ฒซ์งธ ์ค„์— ์˜ฎ๊ธด ํšŸ์ˆ˜ K๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ์ˆ˜ํ–‰ ๊ณผ์ •์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ K๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๋‘ ์ •์ˆ˜ A B๋ฅผ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ด๋Š” A๋ฒˆ์งธ ํƒ‘์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์›ํŒ์„ B๋ฒˆ์งธ ํƒ‘์˜ ๊ฐ€์žฅ ์œ„๋กœ ์˜ฎ๊ธด๋‹ค๋Š” ๋œป์ด๋‹ค.

 

 

์ž…์ถœ๋ ฅ ์˜ˆ


<์ž…๋ ฅ 1>

3

 

 

 

<์ถœ๋ ฅ 1>

7
1 3
1 2
3 2
1 3
2 1
2 3
1 3

 

 

ํ’€์ด


[Golang]

package main

import (
	"bufio"
	"fmt"
	"os"
)
var printBuf []string
var result int

func init () {
	printBuf = make([]string, 0, 100000)
}

func hanoi(n, from, to, aux int) {
	result++
	if n == 1 {
		printBuf = append(printBuf, fmt.Sprintf("%d %d", from, to))
		return
	}

	hanoi(n-1, from, aux, to)
	printBuf = append(printBuf, fmt.Sprintf("%d %d", from, to))
	hanoi(n-1, aux, to, from)
}

func main() {
	r := bufio.NewReader(os.Stdin)
	var num int
	_, _ = fmt.Fscanf(r, "%d\n", &num)
	hanoi(num, 1, 3, 2)
	fmt.Println(result)
	for _, printResult := range printBuf {
		fmt.Println(printResult)
	}
}

 

[C++]

#include <iostream>
#include <vector>

using namespace std;

int result = 0;
vector<char> vec;

void hanoi(int n, char from, char to, char aux)
{
	result++;
	if (n == 1)
	{
		vec.push_back(from);
		vec.push_back(' ');
		vec.push_back(to);
		vec.push_back('\n');
		return;
	}

	hanoi(n - 1, from, aux, to);
	vec.push_back(from);
	vec.push_back(' ');
	vec.push_back(to);
	vec.push_back('\n');
	hanoi(n - 1, aux, to, from);
}

int main()
{
	cin.tie(NULL);
	ios::sync_with_stdio(false);
	int num;
	cin >> num;

	hanoi(num, '1', '3', '2');
	cout << result << '\n';
	for (char print : vec)
	{
		cout << print;
	}
	return 0;
}

 

 

ํ’€์ด ์„ค๋ช…


 ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ์ธ ํ•˜๋…ธ์ด ํƒ‘ ๋ฌธ์ œ๋‹ค.

 

https://algorithms.tutorialhorizon.com/towers-of-hanoi

1. ์›๋ฐ˜์ด ํ•œ ๊ฐœ์ผ ๋•Œ ๊ทธ๋ƒฅ Destination์— ์˜ฎ๊ธฐ๋ฉด ๋œ๋‹ค.(์ข…๋ฃŒ ์กฐ๊ฑด).

2. ์›๋ฐ˜์ด n๊ฐœ์ผ ๋•Œ

   2-1) Source์˜ n๊ฐœ ์›๋ฐ˜ ์ค‘ n-1๊ฐœ๋ฅผ Auxiliary๋กœ ์ž ์‹œ ์˜ฎ๊ธด๋‹ค.

   2-2) Source์— ๋‚จ์•„์žˆ๋Š” ์›๋ฐ˜์„ Destination์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

   2-3) Auxiliary์— ์žˆ๋Š” n-1๊ฐœ์˜ ์›๋ฐ˜์„ Destination์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

๋ฐ˜์‘ํ˜•