본문 바로가기
DEV/알고리즘 문제 풀이

백준 1914번 - 하노이탑 [c언어]

by krokerdile 2020. 4. 16.

이건 뭘 잘 못한걸까...

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

void hanoi(int n, int fo, int mid, int la) {
	if (n == 1) {
		printf("%d %d\n", fo, la);
		return; 
		//단순히 생각했을때 만약에 옮겨야하는 고리가 하나라면, 첫번째에서 세번째 지점으로 옮겨주면 되면 된다.
	}
	//생각하는 순서대로 코드를 짰을 때 이해가 안되는 세줄
	//일단 단순히 생각해서 고리가 남았고, 2개일 경우에는 한개를 중간에 옮겨 두고 그다음에 남은 고리를 마지막에 옮긴 후에 중간꺼를 옮겨줘야 한다.
	hanoi(n - 1, fo, la, mid);
	//두번째로 그러면 1개가 남았을 것이기 때문에 
	hanoi(1, fo, mid, la);
	//만약에 3개 이상일 경우에는 앞에 있는 2개일 때 경우의 도착지점이 중간 지점이 되게 되고, 3번째와 2번째 고리를 옮긴 후에 마지막으로 1번째 고리를 세번째에 옮겨줌
	hanoi(n-1, mid, fo, la);

}
int main() {
	int N;
	scanf("%d", &N);
	int temp = pow(2, N) - 1;
	printf("%d\n", temp);
	if( N <= 20){
		hanoi(N, 1, 2, 3);
	}
	return 0;
}

'DEV > 알고리즘 문제 풀이' 카테고리의 다른 글

10998번  (0) 2021.03.12
1001번  (0) 2021.03.12
백준 2906번 : 에라토스테네스의 체 [c언어]  (0) 2020.04.19
백준 11729번 - 하노이 탑 문제 [c언어]  (0) 2020.04.16