Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- BeautifulSoup
- 시뮬레이션
- 클래스
- 완전 탐색
- 우선순위 큐
- 분할 정복
- 큐
- SSAFY
- BFS
- dfs
- 링크드리스트
- 비트마스크
- 백트래킹
- 크루스칼
- MST
- 문자열
- 이분 탐색
- 순열
- 메모리풀
- 스택
- 그리디
- DP
- 세그먼트 트리
- 빠른 입출력
- lis
- 피보나치 수
- 조합
- 재귀
- Knapsack
- 중복 순열
Archives
- Today
- Total
작심 24/7
[백준] 11729번 하노이 탑 이동 순서 본문
기둥이 A, B, C이고 N이 2개일 때부터 4개일 때까지 순서를 적어나가보면
B에 N-1개의 원반을 쌓아놓은 후 C에 다 옮기는 방식이 공통적으로 나온다. 즉,
1. A -> B 로 N-1개 옮김
2. A -> C 로 1개 옮김 (가장 큰 원반)
3. B -> C 로 N-1개 옮김
이렇게 세 번의 과정으로 나눌 수 있다.
이걸 그대로 재귀함수에 갖다 넣으면 해결된다.
#include <iostream>
#include <cmath>
using namespace std;
void TowerOfHanoi(int from, int middle, int to, int N) {
if (N != 0) {
TowerOfHanoi(from, to, middle, N - 1);
cout << from << " " << to << "\n";
TowerOfHanoi(middle, from, to, N - 1);
}
}
int main() {
int N;
cin >> N;
cout << (int)pow(2, N) - 1 << "\n";
TowerOfHanoi(1, 2, 3, N);
return 0;
}
이 분 설명이 제일 쉽게 잘 되어 있다.
솔직히 이리저리 규칙을 찾고 조건문으로 해결하려고 애쓰다가 하노이 탑의 규칙을 구글링해서 그 규칙대로 그냥 단순하게 함수에 넣어봤는데 답이 나와서 당황했다.
재귀 문제에 익숙해질 때까지 많이 풀어봐야 할 것 같다.
'백준' 카테고리의 다른 글
[백준] 2108번 통계학 (0) | 2020.05.22 |
---|---|
[백준] 10989번 수 정렬하기 3 (0) | 2020.05.22 |
[백준] 2447번 별 찍기 - 10 (2) | 2020.05.20 |
[백준] 1002번 터렛 (3) | 2020.05.20 |
[백준] 1929번 소수 구하기 (2) | 2020.05.20 |
Comments