예제 입력 1
3
예제 출력 1
7
1 3
1 2
3 2
1 3
2 1
2 3
1 3
https://www.acmicpc.net/problem/11729
- 이동 횟수는 N개의 원판을 옮길 때, 각각 N-1번 N-1번으로 나누어지고 하나를 옮기게 되므로,
void solve(int n, int x, int y)
{
if (n == 0) return;
int z = 6 - x - y;
solve(n - 1, x, z); // N-1번
printf("%d %d\n", x, y); // 1번
solve(n - 1, z, y); // N-1번
}
D[N] = D[N-1] + D[N-1] + 1 = 2*D[N-1] + 1
#include <stdio.h>
int N;
int pow(int x, int n)
{
int result = 1;
for (int i = 0; i < n; i++) result *= x;
return result;
}
void solve(int n, int x, int y)
{
if (n == 0) return;
int z = 6 - x - y;
solve(n - 1, x, z);
printf("%d %d\n", x, y);
solve(n - 1, z, y);
}
int main(void)
{
scanf("%d", &N);
printf("%d\n", pow(2, N) - 1);
solve(N, 1, 3);
return 0;
}
'Algorithm > 문제풀이' 카테고리의 다른 글
[Brute Force] 십자가 찾기 (0) | 2020.02.08 |
---|---|
[Brute Force] 로마 숫자 만들기 (0) | 2020.02.08 |
[분할 정복] 숫자 카드 (0) | 2019.11.30 |
[그리디 알고리즘] 롤러코스터 (0) | 2019.11.21 |
[그리디 알고리즘] NMK (0) | 2019.11.19 |