하노이의 탑

2023. 2. 21. 02:22백준(c , c++)

728x90

#define _CRT_SECURE_NO_WARNINGS //경고 제거
#include <stdio.h>
#include <math.h>
/*
from: 출발막대
  by: 거쳐갈 막대(잠시 원판 보관할 막대)
  to: 목표막대
  n: 원판 개수
*/
void hanoi(int n, int from, int by, int to) {
	if (n == 0)
		return;
	else {
		hanoi(n - 1, from, to, by); //원판 맨밑에 1개 빼고 나머지 n-1개 거쳐갈 막대(2번째)로 옮기기
		printf("%d %d\n", from, to); //맨밑 원판을 목표 막대(3번째)로 옮기기
		hanoi(n - 1, by, from, to); //2번째 막대에 있는 원판들 목표막대(3번째)로 모두 옮기기
	}

}

int main() {
	int N;
	scanf("%d", &N);
	int k = pow(2,N) - 1; //최소한으로 이동 횟수: 2^N -1
	printf("%d\n", k);
	hanoi(N, 1, 2, 3); 
	/* 출발 막대: 1
	   거쳐갈 막대: 2
	   목표 막대: 3
	*/
	return 0;
}
728x90

'백준(c , c++)' 카테고리의 다른 글

25501-printf 함수  (1) 2023.02.08
좌표 압축 기법- 18870번  (0) 2023.02.07
10814번  (0) 2023.02.06
1181번  (0) 2023.02.06
2차원 배열을 정렬할 때 구조체 사용하기  (1) 2023.01.25