Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
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 26 27
28 29 30
Archives
Today
Total
관리 메뉴

dh-winternagi 님의 블로그

(11729) 하노이 탑 이동 순서 본문

백준 (C++)/Solve

(11729) 하노이 탑 이동 순서

dh-winternagi 2026. 4. 17. 08:11

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

단계별로 풀어보기

19단계(재귀) 7번째

 

 

 

func(x, y, n)을 x번 장대에 n층 쌓인 탑을 y번 장대로 보내는 함수라고 하자.

이때 나머지 장대을 z번이라고 하면 func(x, y, n)은 세 단계로 나눌 수 있다.

1. x번 장대에 n-1층 쌓인 탑을 z번 장대로 보낸다.

2. x번 장대의 (1에서 쌓고 남은 n번째) 원판을 y번 장대로 보낸다.

3. z번 장대에 n-1층 쌓인 탑을 y번 장대로 보낸다.

여기서 n층 탑의 이동 횟수는 n-1층 탑 이동 횟수의 2배 +1이라는 점화식을 구할 수 있으며,

일반항으로 풀면 이동 횟수는 2^n-1이다.

 

 

 

#include <iostream>
using namespace std;

int main() 
{
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  
  int n;
  
  cin >> n;
  
  cout << (1<<n)-1 << "\n";
  
  auto func= [&](auto self, int x, int y, int n) -> void {
    if(n==1){
      cout << x << " " << y << "\n";
      return;
    }
    
    int z= 6-x-y;
    
    self(self, x, z, n-1);
    cout << x << " " << y << "\n";
    self(self, z, y, n-1);
  };
  
  func(func, 1, 3, n);
  
  return 0;
}

'백준 (C++) > Solve' 카테고리의 다른 글

(15650) N과 M (2)  (0) 2026.04.17
(15649) N과 M (1)  (0) 2026.04.17
(2447) 별 찍기 - 10  (0) 2026.04.17
(4779) 칸토어 집합  (0) 2026.04.17
(24060) 알고리즘 수업 - 병합 정렬 1  (0) 2026.04.17