https://school.programmers.co.kr/learn/courses/30/lessons/12946#
function solution(n) {
let answer = [];
function hanoi(n, from, temp, to) {
if (n === 0) return;
// n-1번째를 옮기기 위해선 n번째의 from에서 temp로 옮겨야 한다.
hanoi(n-1, from, to, temp);
answer.push([from, to]); // 이동경로 추가
// temp에서 다시 원래 목적지로 옮긴다.
hanoi(n-1, temp, from, to);
}
// n개의 돌을 1번에서 3번으로 옮겨라. 처음 temp기둥은 2번
hanoi(n, 1, 2, 3)
return answer;
}
풀다가 도저히 안돼서 다른 사람들의 풀이와 강의를 찾아봤다.
참고한 강의
핵심은 사람이 보는 것처럼 첫째 기둥, 둘째 기둥, 셋째 기둥이 고정되어 있는 것이 아니라. 그들의 역할이 계속해서 바뀔 수 있다는 것이다. 이렇게 생각하니 이해가 더 쉬어졌다.
즉, 원판이 3개일 때는 원판을 2개라고 치고, 기둥의 역할을 바꾸어 계산하고, 다시 원판을 2개라고 쳤으니, 똑같이 원판을 1개라고 치고, 역할을 바꾸어 계산하고.... 좀 더 컴퓨팅적 사고를 길러야 겠다...