이동횟수
pow(2,n) -1;
점화식
Dp[n]= Dp[n-1]*2-1;
규칙
(n-1)개의 판을 mid로 옮김
1-1- from에 있는 n을 to로 옮김.
- mid에 있는 (n-1)개의 판을 from으로 (n-2)개 옮김
- 재귀
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <cmath>
using namespace std;
void Hanoi(int N, int A, int B, int C)
{
if (N == 1)
cout << A << " " << C << '\n';
else
{
Hanoi(N - 1, A, C, B);
cout << A << " " << C << '\n';
Hanoi(N - 1, B, A, C);
}
}
int main()
{
cin.tie(NULL);
ios::sync_with_stdio(false);
int N;
cin >> N;
int k = (int)pow(2, N) - 1;
cout << k << '\n';
Hanoi(N, 1, 2, 3);
return 0;
}
다시 한번 풀어보기