본문 바로가기
개발/코딩테스트준비

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

by heidiee 2024. 11. 15.

https://school.programmers.co.kr/learn/courses/30/lessons/12946

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

[알고리즘]

1. n-1 개의 원판을 목적지가 아닌 기둥으로 옮긴다.

2. 가장 마지막 원판을 목적지 기둥으로 옮긴다

3. 다른 기둥에 있던 n-1개의 원판을 목적지 기둥으로 옮긴다

 

이때 n이 1로 전달되는 경우 그냥 바로 목적지로 가면 되니까 예외처리도 해준다

 

#include <string>
#include <vector>

using namespace std;
std::vector<std::vector<int>> answer;
void Hanoi(int n, int from, int dest, int tmp) {
    if (n == 1) {
        answer.push_back({from, dest});
    } else {
    	// n-1 개의 원판을 목적지가 아닌 기둥으로 옮기기
        Hanoi(n-1, from, tmp, dest);
        
        // 마지막 원판을 목적지로 이동시키기
        answer.push_back({from, dest});
        
        // 나머지 tmp 기둥에 있던 N-1개 원판을 목적지로 옮기기
        Hanoi(n-1, tmp, dest, from);
    }
}



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

'개발 > 코딩테스트준비' 카테고리의 다른 글

[프로그래머스] 가장 많이 받은 선물  (2) 2024.11.15