728x90
https://www.acmicpc.net/problem/11729
문제해석
재귀 알고리즘의 이용합니다.
1) 원판의 개수를 입력받습니다.
2) 원판을 이동시켜주는 함수를 작성하여 함수를 호출합니다.
ex. 3개의 원판
- 맨 위 원판 -> 3번 장대
- 2번 원판 -> 2번 장대(중간 장대)
- 1번 원판 -> 2번 장대(3번 장대는 아무것도 없는 상태)
- 3번 원판 -> 3번 장대(1번 장대는 아무것도 없는 상태)
- 1번 원판 -> 1번 장대
- 2번 원판 -> 3번 장대
- 1번 원판 -> 3번 장대
소스코드 & 문제풀이
#include <stdio.h>
#include <math.h>
int hanoi(int a, int b, int n)
{
if (n == 1) // 원판이 한개면 첫 번째 장대에서 바로 마지막 장대로 옮겨줍니다
printf("%d %d\n", a, b);
else // 원판이 두 개이상이면
{
hanoi(a, 6 - a - b, n - 1); // n-1개의 원판을 첫 번째 장대에서 중간 지점 장대로 옮겨줍니다
printf("%d %d\n", a, b); // 가장 큰 원판을 첫 번째 장대에서 마지막 장대로 옮깁니다
hanoi(6 - a - b, b, n - 1); // 중간 장대에 있던 n-1개의 원판을 마지막 장대로 옮깁니다
}
}
int main()
{
int n; // 원판의 개수
int t;
scanf("%d", &n);
t = pow(2, n) - 1; // 하노이의 탑에서 원판을 옮길 때 필요한 총 이동횟수를 계산합니다
printf("%d\n", t);
hanoi(1, 3, n); // 첫 번째 장대에서 세 번째 장대까지 n개의 원판을 옮기는 함수를 호출합니다
}
예제 입출력 결과
*참고
https://codevang.tistory.com/73
728x90
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.1149 : RGB거리 (0) | 2024.09.13 |
---|---|
[BaekJoon/C] No.24416 : 알고리즘 수업 - 피보나치 수 1 (0) | 2024.09.13 |
[BaekJoon/C] No.27433 : 팩토리얼 2 (0) | 2024.08.29 |
[BaekJoon/C] No.11651 : 좌표 정렬하기 2 (0) | 2024.08.20 |
[BaekJoon/C] No.25305 : 커트라인 (0) | 2024.08.20 |