- toc {:toc}
๋ฌธ์
์ธ ๊ฐ์ ์ฅ๋๊ฐ ์๊ณ ์ฒซ ๋ฒ์งธ ์ฅ๋์๋ ๋ฐ๊ฒฝ์ด ์๋ก ๋ค๋ฅธ n๊ฐ์ ์ํ์ด ์์ฌ ์๋ค. ๊ฐ ์ํ์ ๋ฐ๊ฒฝ์ด ํฐ ์์๋๋ก ์์ฌ์๋ค. ์ด์ ์๋์น๋ค์ด ๋ค์ ๊ท์น์ ๋ฐ๋ผ ์ฒซ ๋ฒ์งธ ์ฅ๋์์ ์ธ ๋ฒ์งธ ์ฅ๋๋ก ์ฎ๊ธฐ๋ ค ํ๋ค.
- ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ง์ ๋ค๋ฅธ ํ์ผ๋ก ์ฎ๊ธธ ์ ์๋ค.
- ์์ ๋์ ์ํ์ ํญ์ ์์ ๊ฒ์ด ์๋์ ๊ฒ๋ณด๋ค ์์์ผ ํ๋ค.
์ด ์์ ์ ์ํํ๋๋ฐ ํ์ํ ์ด๋ ์์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ. ๋จ, ์ด๋ ํ์๋ ์ต์๊ฐ ๋์ด์ผ ํ๋ค.
์๋ ๊ทธ๋ฆผ์ ์ํ์ด 5๊ฐ์ธ ๊ฒฝ์ฐ์ ์์์ด๋ค.

์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฒซ ๋ฒ์งธ ์ฅ๋์ ์์ธ ์ํ์ ๊ฐ์ 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);
}