#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);
}
void main() {
int N;
scanf("%d", &N);
int temp = pow(2, N) - 1;
printf("%d\n",temp);
hanoi(N, 1, 2, 3);
}
이렇게 풀긴 했는데 풀고 나서도 코드가 다른 사람들 거랑 비슷해서 맞나 싶었지만 이해가 안되었으므로 추가 공부 필요
'DEV > 알고리즘 문제 풀이' 카테고리의 다른 글
10998번 (0) | 2021.03.12 |
---|---|
1001번 (0) | 2021.03.12 |
백준 2906번 : 에라토스테네스의 체 [c언어] (0) | 2020.04.19 |
백준 1914번 - 하노이탑 [c언어] (0) | 2020.04.16 |