하다보니

11729번-하노이 탑 이동 순서 본문

알고리즘 풀이/백준

11729번-하노이 탑 이동 순서

claire 2022. 2. 8. 14:37
#include<bits/stdc++.h>
using namespace std;

void func(int i,int j, int n) {
	if (n == 1) {
		cout << i << ' ' << j<<"\n";
		return;
	}
	func(i, 6 - i - j, n - 1);
	cout << i << ' ' << j<<"\n";
	func(6 - i - j, j, n - 1);
}

int main() {

	ios::sync_with_stdio(0);
	cin.tie(0);
	int n;
	cin >> n;
	cout << (1 << n) - 1<<"\n";
	func(1, 3, n);
}

위의 풀이를 볼때 func에 들어갈 수를 1,2,4->1,3,3...뭐 이런식으로 절차적으로 생각하면 답도 없다. 

재귀는 무조건 n=1일 때 ok. n-1일때 성립하면 n도 성립. 이런식으로 귀납적으로 생각해야한다. 

 

- 파이썬

def func(a,b,n):
    if n==1:
        print(a,b)
        return
    func(a,6-a-b,n-1)
    print(a,b)
    func(6-a-b,b,n-1)

n=int(input())
print(2**n-1)
func(1,3,n)

'알고리즘 풀이 > 백준' 카테고리의 다른 글

6198번-옥상 정원 꾸미기  (0) 2022.02.09
1074번-Z  (0) 2022.02.08
5014번-스타트링크  (0) 2022.02.08
5427번-불  (0) 2022.02.08
1629-곱셈  (0) 2022.02.07