https://programmers.co.kr/learn/courses/30/lessons/67259
function solution(n) {
hanoi(n, 1, 3, 2);
return arr;
}
let arr = [];
function hanoi(n, from, to, mid) {
if (n == 1) { arr.push([from, to]); }
else {
hanoi(n - 1, from, mid, to);
arr.push([from, to]);
hanoi(n - 1, mid, to, from);
}
}
let n = 2;
console.log(solution(n));
하노이의 탑(Tower of Hanoi)은 퍼즐의 일종이다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있다.
게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다.
hanoi(n, 1, 3, 2);
1(from)에 있는 n개원판을 3(to)으로 보내고, 2(mid)에 중간 위치.
function hanoi(n, from, to, mid) {
if (n == 1) { arr.push([from, to]); }
else {
hanoi(n - 1, from, mid, to);
arr.push([from, to]);
hanoi(n - 1, mid, to, from);
}
}
n==1인경우는 가장 작은 원판을 옮길 때이다.
가장 작은 원판을 옮길 때 from, to를 arr에 저장한다.
2개이상의 원판을 옮길 때 가장 밑의 원판을 중간 위치(mid)로 보낸다.
가장 아래쪽 원판을 목표위치로 옮기고 ([from,to]),
중간 위치(mid)로 보낸 원판을 다시 목표위치로 옮겨서 전체이동을 마무리한다.
https://ko.wikipedia.org/wiki/하노이의_탑
https://blog.martinwork.co.kr/theory/2018/10/07/hanoi-algorithm.html
https://velog.io/@jeky22/javascript-프로그래머스-하노이의-탑