반응형
Notice
Recent Posts
Recent Comments
Link
DNF LOVE
[C++ & C, 하노이 타워, 하노이 탑] 재귀문으로 푸는 하노이탑 본문
반응형
하노이의 탑(Tower of Hanoi)은 퍼즐의 일종이다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있다.
게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다.
- 한 번에 하나의 원판만 옮길 수 있다.
- 큰 원판이 작은 원판 위에 있어서는 안 된다
예를 들어 n이 3이라면,
- 기둥 A의 원반을 기둥 C으로 옮긴다.
- 기둥 A의 원반을 기둥 B으로 옮긴다.
- 기둥 C의 원반을 기둥 B으로 옮긴다.
- 기둥 A의 원반을 기둥 C으로 옮긴다.
- 기둥 B의 원반을 기둥 A으로 옮긴다.
- 기둥 B의 원반을 기둥 C으로 옮긴다.
- 기둥 A의 원반을 기둥 C으로 옮긴다.
이를 알고리즘으로 나눠서 계산해보면
- 기둥 1에서 n - 1개의 원반을 기둥 2으로 옮긴다.
- 기둥 1에서 1개의 원반을 기둥 3으로 옮긴다.
- 기둥 2에서 n-1개의 원반을 기둥 3으로 옮긴다.
- 반복
재귀문으로 풀기
int hanoi(int n, char from, char temp, char to){
if(n == 1){
printf("원반 %d를 기둥 %c에서 기둥 %c으로 옮긴다.\n", n, from, to);
}else{
hanoi(n-1, from, to, temp);
printf("원반 %d를 기둥 %c에서 기둥 %c으로 옮긴다.\n", n, from, to);
hanoi(n-1, temp, from, to);
}
}
반응형
'Computer Science > 알고리즘' 카테고리의 다른 글
[C++, 약수를 구하는 알고리즘] 약수를 구하는 다양한 방법과 소인수분해 (0) | 2019.10.23 |
---|---|
[JAVA, 피보나치 알고리즘] 피보나치 코드 구현의 다양한 방법 (0) | 2019.08.07 |
[알고리즘] 연산량 줄이기(feat. 가지치기) (0) | 2019.07.27 |
Dynamic Programming(다이나믹 프로그래밍)에 대해서(Feat. 피보나치 수) (0) | 2019.07.11 |
정렬 알고리즘(Sorting Algorithm)의 모든 것 ④ - 힙 정렬(Heap Sort) (0) | 2019.01.25 |