하노이탑 공부하면서 겸사겸사 백준 문제도 풀어보도록 했다.
재귀함수는 그대로 인데.. 함수내부에서 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 |
댓글