BOJ/미해결

BOJ 11729 - 하노이 탑 이동 순서

yanJuicy 2024. 8. 15. 12:26
반응형

문제

https://www.acmicpc.net/problem/11729

 

 

풀이

재귀를 이용해 문제를 해결한다

1. 가장 큰 원판 n은 맨 밑에 있어야 하므로 n-1개를 첫 번째 장대에서 두 번째 장대로 옮긴다

2. 원판 n을 첫 번째 장대에서 세 번째 장대로 옮긴다

3. 원판 n-1개를 두 번째 장대에서 세 번째 장대로 옮긴다

 

원판을 옮겨야 하는 총 횟수는  2-1 이다

재귀함수에서 2ⁿ으로 자기 자신을 호출하고 n == 1일 때 한 번만 호출하므로 -1을 해준다

 

 

코드

python

1
2
3
4
5
6
7
8
9
10
11
12
13
def hanoi(n, src, aux, dest):
    if n == 1:
        print(src, dest)
    else:
        hanoi(n - 1, src, dest, aux)
        print(src, dest)
        hanoi(n - 1, aux, src, dest)
 
 
= int(input())
 
print(2**- 1)
hanoi(n, 123)
cs

 

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
using namespace std;
 
void func(int a, int b, int n)
{
    if (n==0return;
    func(a, 6-a-b, n-1);
    cout << a << ' ' << b << '\n';
    func(6-a-b, b, n-1);
}
 
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(0);
 
    int n;
    cin >> n;
    cout << (1 << n) - 1 << '\n';
    func(13, n);
 
 
    return 0;
}
cs

 

반응형

'BOJ > 미해결' 카테고리의 다른 글

BOJ 1489 - 대결  (0) 2024.08.17
BOJ 1071 - 소트  (0) 2024.08.16
BOJ 1083 - 소트  (0) 2024.08.10
BOJ 1931 - 회의실 배정  (0) 2024.08.09
BOJ 1541 - 잃어버린 괄호  (0) 2024.08.08