study
하노이의 탑[프로그래머스]
Date: 2026-05-31 04:22
Update: 2026-06-01 08:15


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

접근법:

  1. 3개의 기둥이 있다. N개의 원판을 1번 기둥에서 3번기둥으로 이동시킨다.
  2. 옮겨야 할 원판이 N개라면 시작 기둥에서 목표 기둥으로 옮기고 끝낸다.
  3. 재귀
    1. 가장 큰 원판을 먼저 옮겨야 하므로 위에있는 원판 N-1개를 보조기둥으로 먼저 옮긴다.
    2. 시작기둥에 남은 가장 큰 원판 1개를 목표기둥으로 옮긴다.
    3. 보조기둥에 있는 원판들을 다시 목표기둥으로 옮겨 한다.
      1. 이때 보조기둥을 start로 쓰고 start로 사용했던 기둥을 보조기둥으로 사용한다.
#include <string>
#include <vector>
using namespace std;

void hanoi(int n, int start, int target, int mid, vector<vector<int>>& answer)
{
    if(n == 1)
    {
        answer.push_back({start, target});
        return;
    }
    
    hanoi(n-1, start, mid, target, answer);
    
    answer.push_back({start, target});
    
    hanoi(n-1, mid, target, start, answer);
}

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