๐Ÿ“Œ ์ˆœํ™˜์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•˜๋…ธ์ด ํƒ€์›Œ ๋ฌธ์ œ

์›๋ฐ˜์˜ ๊ฐœ์ˆ˜๋ฅผ 3์—์„œ 10๊นŒ์ง€ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด ๋ณธ๋‹ค. ๋˜ํ•œ ๋””์Šคํฌ ์ด๋™ ํšŸ์ˆ˜๋„ ํ™•์ธํ•ด ๋ณผ ๊ฒƒ.

 

** ํ™”๋ฉด ์ถœ๋ ฅ ์˜ˆ (์œ„์น˜ ์ง€์ ์„ A, B, C๋ผ๊ณ  ํ•œ ๊ฒฝ์šฐ์˜ ์˜ˆ) :

#1. ๋””์Šคํฌ 1๊ฐœ๋ฅผ A์ง€์ ์—์„œ C๋กœ ์˜ฎ๊ธด๋‹ค.

#2. ๋””์Šคํฌ 1๊ฐœ๋ฅผ B์ง€์ ์—์„œ B๋กœ ์˜ฎ๊ธด๋‹ค.

.......

(*์ถœ๋ ฅ ์ค„์˜ ์ˆ˜๋Š” ๋””์Šคํฌ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธ)

 

 ๐Ÿ“Œ ํ’€์ด

์ถœ์ฒ˜: https://ledgku.tistory.com/39

๊ฐ€์žฅ ํฐ(๋งจ ๋ฐ‘) ์›ํŒ๊ณผ ๋‚˜๋จธ์ง€๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ฐ€์žฅ ํฐ ์›ํŒ์„ ๋บ€ ๋‚˜๋จธ์ง€๋ฅผ 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;
 }

+ Recent posts