본문 바로가기
백준

[백준/C++] 1914 하노이 탑

by MY블로그 2023. 4. 25.

하노이탑 공부하면서 겸사겸사 백준 문제도 풀어보도록 했다.

재귀함수는 그대로 인데.. 함수내부에서 else 부분에 매개변수 순서를 공부한대로 했더니 틀렸다고한다..

 

Hanoi(n - 1, mid, from, to);  // 이렇게된게 아래쪽이었는데 위에 있어야 정답이었다...
cout << from << " " << to << "\n";
Hanoi(n - 1, from, to, mid);

 

그리고 실행 횟수 카운트를 static int 변수 하나로 해보려했는데 안되서 찾아봤더니 처음보는 함수들을 보았다.

	// 횟수 출력 하는 부분 찾아서 복사 붙여넣기 했음... 처음보는 함수들이다.
	string a = to_string(pow(2, N));
	int x = a.find('.'); //pow 함수는 실수형을 출력해서 소수점을 찾아내고
	a = a.substr(0, x);	// 소수점은 버리고 출력
	a[a.length() - 1] -= 1;	//string a에 대한 마지막 위치의 인덱스 값에 -1
	cout << a << endl;

이부분 이었는데 완전히 처음보는 부분이다.

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cmath>
#define fastio cin.tie(0)->ios::sync_with_stdio(0); cout.tie(0);
using namespace std;

void Hanoi(int n, int from, int mid, int to)
{
	if (n == 1)
		cout << from << " " << to<<"\n";
	else
	{
    	// 재귀 순서 중요
		Hanoi(n - 1, mid, from, to); 
		cout << from << " " << to << "\n";
		Hanoi(n - 1, from, to, mid);
	}
}

int main()
{
    fastio;

	int N;
	cin >> N;

	// 횟수 출력 하는 부분 찾아서 복사 붙여넣기 했음... 처음보는 함수들이다.
	string a = to_string(pow(2, N));
	int x = a.find('.'); //pow 함수는 실수형을 출력해서 소수점을 찾아내고
	a = a.substr(0, x);	// 소수점은 버리고 출력
	a[a.length() - 1] -= 1;	//string a에 대한 마지막 위치의 인덱스 값에 -1
	cout << a << endl;
	if (N <= 20) // 원반갯수 20개 넘지 않도록 조건문
		Hanoi(N, 1, 2, 3);

    return 0;
}

'백준' 카테고리의 다른 글

[백준/C++] 10845 큐  (0) 2023.05.03
[백준/C++] 2485 가로수 (유클리드호제법, 최대공약수)  (0) 2023.05.02
[백준/C++] 1181 단어 정렬  (0) 2023.04.11
[백준/C++] 1094 막대기  (0) 2023.04.10
[백준/C++] 1010 다리놓기  (0) 2023.04.07

댓글