너무 유명한 문제이기 때문에 문제는 생략.
재귀를 이용할 수 있는지를 알아보는 문제.
void Move(int id, char from, char to) {
printf("[원판%d] %c -> %c\n",id, from, to);
}
//from에 꽂혀있는 num개의 원판을 by를 거쳐서 to로 이동.
void SolveHanoi(int num, char from, char by, char to)
{
if (num == 1) {
Move(1, from, to);
return;
}
SolveHanoi(num - 1, from, to, by);
Move(num, from, to);
SolveHanoi(num - 1, by, from, to);
}
int main() {
SolveHanoi(5, 'A', 'B', 'C');
}
가장 큰 원판을 제외하고, 나머지를 from에서 by로 옮긴다.
가장 큰 원판을 from 에서 to로 옮긴다.
by로 옮겼던 나머지를 to로 옮긴다.
시간복잡도는
'아카이빙' 카테고리의 다른 글
AVL 트리 (0) | 2018.05.29 |
---|---|
이진 탐색 트리(Binary Search Tree) (0) | 2018.05.29 |
정렬된 두 배열을 병합하기 (0) | 2018.05.24 |
Python으로 알고리즘 공부 12. 최소 신장 트리 - Kruskal 알고리즘 (0) | 2017.07.20 |
Python으로 알고리즘 공부 11. 최장 공통 부분 수열 (0) | 2017.07.14 |