C++:: 프로그래머스 < 하노이의 탑 >

jahlee·2023년 8월 2일
0

프로그래머스_Lv.2

목록 보기
89/106
post-thumbnail

그 유명한 하노이의 탑 문제이다. 벡터에 결과를 담아서 리턴해주면 되는 문제이다. 재귀적 접근에 대한 이해가 있다면 풀 수 있는 문제이다.
간단하게 설명하면 n 개짜리 하노이탑은 n-1개를 현재점과 목표지점이 아닌 지점(6 - go - to)에 두고 n번 원판(쌓인것중 가장큰)을 목표지점에 둔다음 n-1개의 원판들을 다시 목표지점으로 보내는 재귀적인 방법을 사용하면 된다.

#include <string>
#include <vector>

using namespace std;

void hanoi(int n, int go, int to, vector<vector<int>>& answer) {
    if (n == 1) {// 쌓인 원판이 한개라면 
        answer.push_back({go, to});
        return ;
    }
    hanoi(n-1, go, 6-go-to, answer);// n-1 개의 원판을 시작점, 목표점을 제외한 곳으로 이동
    hanoi(1, go, to, answer);// n번째 원판을 목표지점으로 이동
    hanoi(n-1, 6-go-to, to, answer);// n-1 개의 원판을 목표점으로 이동
}

vector<vector<int>> solution(int n) {
    vector<vector<int>> answer;
    hanoi(n, 1, 3, answer);
    return answer;
}

0개의 댓글