※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 11729번 문제인 하노이 탑 이동 순서이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/11729
11729번: 하노이 탑 이동 순서
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
하노이 탑 문제는 잘 알려진 유명한 문제이므로 문제에 대한 설명은 생략한다.
탑 A를 B로 옮기려면, A의 바닥을 제외한 나머지를 제 3의 바닥 C로 옮기고 A의 바닥을 B로 옮긴 다음, C에 옮겨둔 탑을 다시 B로 옮기면 된다.
이 과정은 재귀적으로 구현이 가능하다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
void hanoi(int N, int A, int B, int C) { // A: 시작위치 B: 도착위치 C: (상대적) 빈칸
if (N == 1) cout << A << ' ' << B << '\n';
else {
hanoi(N - 1, A, C, B);
cout << A << ' ' << B << '\n';
hanoi(N - 1, C, B, A);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int idx = 1;
int N; cin >> N;
for (int i = 1; i < N; i++) {
idx <<= 1; idx++;
}
cout << idx << '\n';
hanoi(N, 1, 3, 2);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 2904 // C++] 수학은 너무 쉬워 (0) | 2021.08.30 |
---|---|
[BOJ 1193 // C++] 분수찾기 (0) | 2021.08.29 |
[BOJ 17394 // C++] 핑거 스냅 (0) | 2021.08.27 |
[BOJ 11238 // C++] Fibo (0) | 2021.08.26 |
[BOJ 17080 // C++] 결함 게임 (0) | 2021.08.25 |