규칙은 모두들 아시죠?
옮기는 최소 횟수: (2^n)-1
@푸는 법@
원반이 홀수개 일때:
제일작은원반을 3번째 막대로 (이하생략)→다른원반→제일작은원반 2번째→다른원반→제일작은원반 1번째→다른원반 (이걸 반복)
원반이 짝수개 일때:
제일작은원반을 2번째→다른원반→제일작은원반 3번째→다른원반→제일작은원반 1번째→다른원반 (이걸 반복)
어떻게 코딩으로 짜면 좋을까요?
생각만 해도 머리가 뚏뺡휉촭 돌아가서...
간단하게만 생각하면,
void hanoi(int i, int x, int y, int z){
if(i==1){
printf("%d %d\n", x, y);
return;
}
hanoi(i-1, x, z, y);
printf("%d %d\n", x, y);
hanoi(i-1, z, y, x);
}
이렇게 짜고 호출할 때는 hanoi(n, 1, 3, 2); 이렇게 하면 될겁니다.
(n=원판의 개수)
실행 안해보고 짠 거라 에러가 있을수도 있습니다.
앗 감사합니다. 에러는 제가 고쳤어요!