🐣 알고리즘 삐약/💻 백준 삐약

20 삐약 : 백준 11729 [C++]

우주수첩 2022. 4. 10. 19:09
728x90

https://www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net

 

#include <iostream>
#include <string>
using namespace std;

void hanoi(int n, int start, int mid, int dest) {
	if (n == 1)  printf("%d %d\n", start, dest);
	else {
		hanoi(n - 1, start, dest,mid);
		printf("%d %d\n", start, dest);
		hanoi(n - 1, mid, start, dest);
	}
}
int main() {
	int num;
	cin >> num;
	// cout << (int)pow(2, num) - 1 << '\n';
	cout << (1 << num) - 1 << '\n';
	hanoi(num, 1, 2, 3);

 

hanoi(N) : N개의 원반을 옮긴다

hanoi(N-1) : n-1개의 원반을 옮긴다.

 

*재귀 가능성 여부 판단 : hanoi(3)에서 hanoi(2)를 발견할 수 있는가?

  => 발견 가능!! => 재귀로 구현 가능

hanoi(N)은 두번의 hanoi(N-1)의 재귀 과정을 요구

 

 => 전체 과정을 세 과정의 연속을 로 분해 가능

 

1. hanoi(n-1) : n-1개의 원반을 2번으로 이동

2. 1번에 있는 가장 큰 원반을 3번으로 이동

3. hanoi(n-1) : 2번에 있는 n-1개의 원반을 3으로 이동

 

 

 

 

참고 : https://shoark7.github.io/programming/algorithm/tower-of-hanoi

728x90

'🐣 알고리즘 삐약 > 💻 백준 삐약' 카테고리의 다른 글

22 삐약 : 백준 1260 [C++]  (0) 2022.04.11
21 삐약 : 백준 17478 [C++]  (0) 2022.04.10
19 삐약 : 백준 2447 [C++]  (0) 2022.04.10
18 삐약 : 백준 10870 [C++]  (0) 2022.04.10
17 삐약 : 백준 10872 [C++]  (0) 2022.04.10