๐ ์ํ์๊ณ ๋ฆฌ์ฆ ํ๋ ธ์ด ํ์ ๋ฌธ์
์๋ฐ์ ๊ฐ์๋ฅผ 3์์ 10๊น์ง ๋ณ๊ฒฝํ๋ฉด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด ๋ณธ๋ค. ๋ํ ๋์คํฌ ์ด๋ ํ์๋ ํ์ธํด ๋ณผ ๊ฒ.
** ํ๋ฉด ์ถ๋ ฅ ์ (์์น ์ง์ ์ A, B, C๋ผ๊ณ ํ ๊ฒฝ์ฐ์ ์) :
#1. ๋์คํฌ 1๊ฐ๋ฅผ A์ง์ ์์ C๋ก ์ฎ๊ธด๋ค.
#2. ๋์คํฌ 1๊ฐ๋ฅผ B์ง์ ์์ B๋ก ์ฎ๊ธด๋ค.
.......
(*์ถ๋ ฅ ์ค์ ์๋ ๋์คํฌ ์ด๋ ํ์๋ฅผ ์๋ฏธ)
๐ ํ์ด
๊ฐ์ฅ ํฐ(๋งจ ๋ฐ) ์ํ๊ณผ ๋๋จธ์ง๋ก ๋๋์ด์ ์๊ฐํด๋ณด๋ฉด ๊ฐ์ฅ ํฐ ์ํ์ ๋บ ๋๋จธ์ง๋ฅผ B๋ก ์ฎ๊ธด ํ ๊ฐ์ฅ ํฐ ์ํ์ C๋ก ์ฎ๊ธฐ๊ณ ๋ค์ ๋๋จธ์ง๋ฅผ B์์ C๋ก ์ฎ๊ธด๋ค.
์ฆ, ๋จ๊ณ๋ง๋ค ๊ฐ์ฅ ํฐ ์ํ์ ์ ์ธํ ๋๋จธ์ง๋ ๋ชจ๋ B๋ฅผ ๊ฑฐ์ณ์ C๋ฅผ ๊ฐ๋ค๋ ๊ฒ์ด๋ค. (์ถ๋ฐ์ง์์ ๊ฒฝ์ ์ง๋ฅผ ๋ค๋ ค์ ๋ชฉ์ ์ง์ ๋์ฐฉํจ.)
๊ทธ๋ฌ๋ฉด ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํด์ ์๋ฅผ ๋ค์ด ์ํ์ด 5๊ฐ๊ฐ ์๊ณ 1, 2, 3, 4, 5๋ฅผ ํฌ๊ธฐ์์ด๋ผ๊ณ ์น๋ฉด
1. 1~4๋ฅผ B๋ก ์ฎ๊ธฐ๊ณ 5๋ฅผ C๋ก ์ฎ๊ธด๋ค.
2. 1~3์ A๋ก ์ฎ๊ธฐ๊ณ 4๋ฅผ C๋ก ์ฎ๊ธด๋ค.
3. 1~2๋ฅผ B๋ก ์ฎ๊ธฐ๊ณ 3์ C๋ก ์ฎ๊ธด๋ค.
4. 1์ A๋ก ์ฎ๊ธฐ๊ณ 2๋ฅผ C๋ก ์ฎ๊ธด๋ค.
5. 1์ C๋ก ์ฎ๊ธด๋ค.
์ด๋ ๊ฒ ๋ณผ ์ ์๋ค.
๐ ์ฝ๋1 (์ฃผ์ ์ฐธ๊ณ )
#include <iostream>
using namespace std;
int cnt = 0; // ์ด๋ ํ์์ ์ด์ฉ.
void Hanoi(int n, char from, char temp, char to)
// n : ์๋ฐ๊ฐ์, from : ์๋ ์์น, temp : ์์ ์ฅ์, to :๋ชฉ์ ์ง
{
// cnt = pow(2, n) - 1;
// ๊ฐ์ฅ ๋ฐ์ ์๋ ์๋ฐ์ ์ ์ธํ ๋ชจ๋ ์๋ฐ์ from -> temp -> to๋ก ์ฎ๊ฒจ์ง๋ค.
if (n == 1) {
cout << "#" << ++cnt << ".๋์คํฌ 1๊ฐ๋ฅผ " << from << "์ง์ ์์ " << to << "๋ก ์ฎ๊ธด๋ค." << endl;
}
else {
Hanoi(n - 1, from, to, temp); // ๋งจ ๋ฐ ์๋ฐ์ ์ ์ธํ ๋ชจ๋ ์๋ฐ์ from์์ temp๋ก ์ฎ๊ธด๋ค.
cout << "#" << ++cnt << ".๋์คํฌ 1๊ฐ๋ฅผ " << from << "์ง์ ์์ " << to << "๋ก ์ฎ๊ธด๋ค." << endl; // ๋งจ ๋ฐ ์๋ฐ์ from์์ to๋ก ์ฎ๊ธด๋ค.
Hanoi(n - 1, temp, from, to); // ๋งจ ๋ฐ ์๋ฐ์ ์ ์ธํ ๋ชจ๋ ์๋ฐ์ temp์์ to๋ก ์ฎ๊ธด๋ค.
}
}
void main()
{
int n; //์๋ฐ์ ์
cout << "์๋ฐ์ ๊ฐฏ์๋ฅผ ์
๋ ฅํ์ธ์ : ";
cin >> n;
Hanoi(n, 'A', 'B', 'C'); // n๊ฐ์ ์๋ฐ์ 'A'์์ 'C'๋ก ์ด๋
cout << "์ ์ฒด ์๋ฐ ์ด๋ ์(์๋ฐ์ : " << n << ") = " << cnt << endl;
}