우당탕탕 개발일기

[javascript] 백준 11729번 하노이 탑 이동 순서 본문

What I Learned/Algorithm

[javascript] 백준 11729번 하노이 탑 이동 순서

rilee 2022. 3. 31. 10:59
728x90

📝 문제

https://www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net

 

 

✍🏻 풀이

옛날에 재밌게 했던 컵에 있는 물 옮겨담는 게임같은 느낌! 예제와 출력을 통해 어떤 것을 구해야하는지 파악부터 했다.

 

3

입력값 3은 첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)을 의미한다.

이걸 세번째 장대에 옮기는 횟수와 옮긴 과정(장대 번호, 옮긴 원판 번호) 을 출력하면 된다.

 

7
1 3
1 2
3 2
1 3
2 1
2 3
1 3

 

 

💡 코드

let fs = require('fs');
let input = fs.readFileSync("/dev/stdin").toString();

let N = Number(input); // 원판의 갯수
let count = 0;
let answer = [];

// num : 원반의 개수
// from : 출발 장대 번호
// to : 목적지 장대 번호
// other : 나머지 장대 번호

function Hanoi(num, from, other, to){
    if(num === 0) {
        return;
    }else{
        // 받아온 원반 갯수보다 하나 적은 원반들을 목적지가 아닌 곳으로 재귀적으로 이동
        Hanoi(num - 1 , from, to, other);
        // 맨 아래 원반을 목적지 장대로 이동시킴
        answer.push([from, to]);
        count++;
        // 나머지 장대로 옮겼던 원반들을 그 위에 얹음
        Hanoi(num - 1, other, from, to);
    }
}
Hanoi(N, '1','2','3');
console.log(count);
console.log(answer.map((element) => element.join(" ")).join("\n"));

 

 

📍 참고

https://nyang-in.tistory.com/210

 

[백준] 11729. 하노이 탑 이동 순서(node.js/javascript/하노이의 탑 알고리즘/코딩테스트/자바스크립트

[백준] 11729. 하노이 탑 이동 순서 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 34398 16760 13013 48.547% 문제 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원

nyang-in.tistory.com

 

728x90