반응형

문제

www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

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

www.acmicpc.net

 

해설

최소 횟수: 2^N-1


코드

#include<iostream>
#include<cmath>

using namespace std;

void hanoi(int n, int start, int mid, int end) {

	if (n == 1) cout << start << " " << end << '\n';
	else {
		hanoi(n - 1, start, end, mid); // n-1 개의 원반을 start에서 end로 옮긴다
		cout << start << " " << end << '\n';
		hanoi(n - 1, mid, start, end); // n-1 개의 원반을 mid에서 end로 옮긴다.
	}

}

int main() {

	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int n;
	cin >> n;
	cout << (int)pow(2,n)-1<<'\n'; //pow() 실수형 반환 -> 정수형 변환
	hanoi(n, 1, 2, 3);
	return 0;

}

 

 

 

반응형

'Development > Algorithm' 카테고리의 다른 글

[BOJ] 3085. 사탕 게임  (0) 2020.10.06
[BOJ] 2583. 영역 구하기  (0) 2020.10.06
[BOJ] 2606. 바이러스  (0) 2020.10.04
[BOJ] 10809. 알파벳 찾기  (0) 2020.10.03
[BOJ] 2966. 찍기  (0) 2020.10.02