• toc {:toc}

๋ฌธ์ œ

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

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

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

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

https://onlinejudgeimages.s3-ap-northeast-1.amazonaws.com/problem/11729/hanoi.png

์ž…๋ ฅ

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

์ถœ๋ ฅ

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

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

์ถœ์ฒ˜:https://www.acmicpc.net/problem/11729

<ํ’€์ด>

โ€ป๋ถ„ํ• ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฅด์ž. (x) ํ‹€๋ฆฐ ๋ฐฉ๋ฒ•.

๋ถ„ํ• ์ ์ด ์•„๋‹Œ ๊ท€๋‚ฉ์ ์œผ๋กœ ์ƒ๊ฐํ•ด์•ผํ•จ.

n = 1์ผ ๋•Œ, n = k์ผ ๋•Œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด k+1์ผ ๋•Œ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

n๋ฒˆ์งธ ํŒ์„ 3๋ฒˆ์งธ๋กœ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” n-1๊ฐœ ํŒ์„ 2๋ฒˆ์งธ๋กœ ๋ชจ๋‘ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค.

n๋ฒˆ์งธ ํŒ์„ 3๋ฒˆ์งธ๋กœ ์˜ฎ๊ธด๋‹ค.

n-1๊ฐœ ํŒ์„ 3๋ฒˆ์งธ๋กœ ์˜ฎ๊ธด๋‹ค.

#include <iostream>
#include <math.h>
 
using namespace std;
 
void hanoi(int n, int fromPos, int toPos);
 
int main()
{
	int n;
	cin >> n;
	printf("%d\n", int(pow(2,n))-1);
	hanoi(n, 1, 3);
	return 0;
}
 
void hanoi(int n, int fromPos, int toPos)
{
	int viaPos;
	viaPos = 6-fromPos-toPos;
	if(n<=1)
		printf("%d %d\n", fromPos, toPos);
	else
	{
		// n-1๊ฐœ ์›ํŒ์„ 1๋ฒˆ์งธ์—์„œ 2๋ฒˆ์งธ ๊ธฐ๋‘ฅ์œผ๋กœ
		hanoi(n-1, fromPos, viaPos);
		printf("%d %d\n", fromPos, toPos);
		hanoi(n-1, viaPos, toPos);
	}
	
}
#include <bits/stdc++.h>
using namespace std;
 
int cnt = 0;
 
void Hanoi(int n, int start, int end){
    if(n == 1){
        cout << start << ' ' << end << '\n';
        return ;
    }
    Hanoi(n-1, start, 6-start-end);
    cout << start << ' ' << end << '\n';
    Hanoi(n-1, 6-start-end, end);
}
 
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    cout << int(pow(2, n))-1 << '\n';
    Hanoi(n, 1, 3);
}