하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것입니다.
하노이 탑의 세 개의 기둥을 왼쪽 부터 1번, 2번, 3번이라고 하겠습니다. 1번에는 n개의 원판이 있고 이 n개의 원판을 3번 원판으로 최소 횟수로 옮기려고 합니다.
1번 기둥에 있는 원판의 개수 n이 매개변수로 주어질 때, n개의 원판을 3번 원판으로 최소로 옮기는 방법을 return하는 solution를 완성해주세요.
recursionn개의 원판을 가진 하노이 탑은 n-1를 다른 곳으로 옮긴 후 남은 1개를 목표로 옮기고 n-1를 다시 목표로 옮기는 과정이다.n-1개는 다시 n-2개를 다른 곳으로 옮기고 남은 한 개를 목표로 옮기고 n-2개를 다시 목표로 옮기는 과정이다.위의 목표와 아래의 목표는 서로 다른 기둥이다.n-1개를 옮기고 남은 1개를 옮기는 코드는 써놓고 n-1개를 다시 옮기는 과정을 코드에 쓰지 않았다.hanoi(n-1, another, target, current, answer);를 추가해주었다.#include <string>
#include <vector>
using namespace std;
void hanoi(int n, int current, int target, int another, vector<vector<int>> &answer) {
if(n == 1) {
answer.push_back({current, target});
}
else {
hanoi(n-1, current, another, target, answer);
answer.push_back({current, target});
hanoi(n-1, another, target, current, answer);
}
}
vector<vector<int>> solution(int n) {
vector<vector<int>> answer;
hanoi(n, 1, 3, 2, answer);
return answer;
}
function solution(n) {
let answer = [];
const hanoi = (n, curr, target, other) => {
if (n === 1) {
answer = [...answer, [curr, target]];
} else {
hanoi(n - 1, curr, other, target);
hanoi(1, curr, target, other);
hanoi(n - 1, other, target, curr);
}
};
hanoi(n, 1, 3, 2);
return answer;
}