[BOJ / 백준] 11729번 하노이 탑 이동 순서 C++ 문제 풀이

2020. 11. 22. 04:57·Baekjoon/단계별로 풀어보기
728x90

단계별로 풀어보기 - 재귀 단계 - [4단계] 11729번

문제

문제 링크 : www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net

입력 복사 : 

3

 

 

CODE

#include <iostream>
#include <cmath>
using namespace std;

void hanoi(int start, int mid, int end, int n) {
	if (n == 1) {
		cout << start << " " << end<< "\n";
	}
	else {
		hanoi(start, end, mid, n - 1);
		cout << start << " " << end << "\n";
		hanoi(mid, start, end, n - 1);
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;
	cout << (int)pow(2, n) - 1 << '\n';
	hanoi(1, 2, 3, n);
}

 

 

풀이

n개의 원판을 첫번째 막대에서 세번째 막대로 옮기는 기본적인 방법은

n-1개의 원판을 첫번째에서 두번째로,

마지막 원판을 첫번째에서 세번째로,

n-1개의 원판을 두번째에서 세번째로 옮기는 것이다.

이를 바탕으로 재귀 함수를 작성하였다.

 

또한, 옮긴 횟수는 출력하는 한줄마다 count하면 좋겠지만,

횟수를 먼저 출력해야하므로

하노이탑 최소 이동횟수 2^n - 1을 계산하여 출력하였다.

 

	cout << (int)pow(2, n) - 1 << '\n';

여기서 pow 함수 앞에 (int)를 적지 않으면,

입력 최대가 20인 pow 함수의 특성상 오차가 커져서 '틀렸습니다.'가 뜹니다!

 

 

 

결과

728x90
저작자표시 (새창열림)

'Baekjoon > 단계별로 풀어보기' 카테고리의 다른 글

[BOJ / 백준] 2231번 분해합 C++ 문제 풀이  (0) 2020.11.26
[BOJ / 백준] 2798번 블랙잭 C++ 문제 풀이  (0) 2020.11.26
[BOJ / 백준] 2447번 별 찍기 - 10 C++ 문제 풀이  (0) 2020.11.21
[BOJ / 백준] 10870번 피보나치 수 5 C++ 문제 풀이  (0) 2020.11.20
[BOJ / 백준] 10872번 팩토리얼 C++ 문제 풀이  (0) 2020.11.20
'Baekjoon/단계별로 풀어보기' 카테고리의 다른 글
  • [BOJ / 백준] 2231번 분해합 C++ 문제 풀이
  • [BOJ / 백준] 2798번 블랙잭 C++ 문제 풀이
  • [BOJ / 백준] 2447번 별 찍기 - 10 C++ 문제 풀이
  • [BOJ / 백준] 10870번 피보나치 수 5 C++ 문제 풀이
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Web (54)
        • Web (7)
        • Spring (14)
        • MyBatis (1)
        • AWS (7)
        • HTML & CSS (14)
        • JavaScript (11)
      • Programming (37)
        • C++ (3)
        • Java (6)
        • Python (10)
        • MySQL (1)
        • Oracle (2)
        • Git (15)
        • Dev Tools (0)
      • Infra˙ DevOps (1)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    web
    C
    git
    웹
    clean code
    myBatis
    Tistory
    Programmers
    BOJ
    CSS
    자료구조
    Python
    알고리즘
    HTML
    c++
    codeup
    단계별로 풀어보기
    MySQL
    CodeUp 기초 100제
    Cloud
    oracle
    SourceTree
    github
    aws
    JavaScript
    db
    spring
    VS Code
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[BOJ / 백준] 11729번 하노이 탑 이동 순서 C++ 문제 풀이
상단으로

티스토리툴바