BOJ : https://www.acmicpc.net/problem/11729
문제에서 하노이탑을 이동한 과정을 보면
원판이 3개 일때
1 3
1 2
3 2
1 3
2 1
2 3
1 3
의 순서대로 옮긴 것을 확인할 수 있다. 정답을 기준으로 따라가보면
이는 원판이 3개라고 가정했을 때 최종적으로 장대1의 원판3개를 장대3으로 옮기기 위한 과정은
1을 장대3 => 2을 장대2 => 1을 장대2 로 옮겨서 장대1:3 // 장대2:12 // 장대3:x 로 옮겼다는 것을 볼 수 있다.
이는 장대1의 원판의 남은 갯수가 1이 되도록 다른 원판을 장대2로 옮긴 것이다. (알고리즘1)
그리고 나서 장대1의 3을 장대3으로 옮겼다. (알고리즘2)
그리고 나서 장대2의 1,2를 장대3으로 옮겼다. (알고리즘3)
이 3가지의 분할 알고리즘으로 하노이 원판을 이동시킬 수 있다.
더보기
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
|
#include <cstdio>
int cnt = 1;
// in -> 남은 원판개수
// f -> 보내는 장대
// s -> 받는 장대
// none -> 쓰이지않는 장대
void hanoi(int in, int f, int s, int none) {
if (in == 1) {
printf("%d %d\n", f, s);
}
else {
hanoi(in - 1, f, none, s);
hanoi(1, f, s, none);
hanoi(in - 1, none, s, f);
}
}
int main() {
int N;
scanf("%d", &N);
for (int i = 1; i <= N; i++)
cnt *= 2;
printf("%d\n", cnt - 1);
hanoi(N, 1, 3, 2);
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'algorithm > BOJ' 카테고리의 다른 글
백준 2470번 : 두 용액 - Junnnho (0) | 2019.07.04 |
---|---|
에라토스테네스의 체 (0) | 2019.06.30 |
백준 1780번 : 종이의 개수 - Junnnho (0) | 2019.05.30 |
백준 1992번 : 쿼드트리 - Junnnho (0) | 2019.05.29 |
백준 1011번 : Fly me to the Alpha Centauri - Junnnho (0) | 2019.05.19 |