본문으로 바로가기

baekjoon. 하노이 탑 이동 순서

category Algorithm/문제 2020. 12. 20. 14:50

풀이

대표적인 재귀 문제이다

n-1개 만큼 즉 바닥에 있는 제일 큰 원판을 뺀 나머지를 2번에 옮기고 제일 큰 원판을 3번에 놓은 뒤 더 이상 이동할 필요가 없기 때문에 원판을 제외시키고

2번에 있는 원판 중 제일 큰 원판을 뺀 n-1만큼 1번으로 옮긴 뒤 제일 큰 원판을 3번으로 이동 시키는 것을 재귀적으로 구현하면 된다

구현

//const input = Number(require("fs").readFileSync("/dev/stdin").toString());
const input = 4;
const stack = [];

function hanoi(n,from,to){
    const by = 6 - from - to;
    if(n===1) {
        stack.push([`${from} ${to}`]);
        return ;
    }
    hanoi(n-1,from,by);
    stack.push([`${from} ${to}`]);
    hanoi(n-1,by,to);
}

hanoi(input, 1 ,3);
console.log(stack.length);
console.log(stack.join('\n'));

이동 경로를 표시하기위해 stack에 원판을 이동시킬 때 마다 push해 주었다

'Algorithm > 문제' 카테고리의 다른 글

baekjoon. 수 정렬하기 3  (0) 2021.01.01
baekjoon. 수 정렬하기 2  (0) 2020.12.30
baekjoon. 분해합  (0) 2020.12.29
programmers. 직사각형 만들기  (0) 2020.12.16
Recursion - blob 구하기  (0) 2020.12.07