[프로그래머스] 하노이의 탑

상현·2023년 11월 9일
1

코딩테스트

목록 보기
14/30
post-thumbnail

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개라고 치고, 역할을 바꾸어 계산하고.... 좀 더 컴퓨팅적 사고를 길러야 겠다...

profile
프론트엔드 개발자

0개의 댓글