[백준(Baekjoon)][자바(java)] (11729) 하노이 탑 이동 순서 / 재귀

728x90

 

import java.util.Scanner;

public class Main {

	static int k = 0;
	static StringBuffer buffer = new StringBuffer();
	
	static void hanoi( int n, int from, int by, int to ) {
		k++;
		if( n == 1 ) 
			buffer.append( from + " " + to + "\n" );
		else {
			hanoi( n-1, from, to, by );
			buffer.append( from + " " + to + "\n" );
			hanoi( n-1, by, from, to );
		}
	}

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		hanoi( sc.nextInt(), 1, 2, 3 );
		
		buffer.insert( 0, k + "\n" );
		
		System.out.println( buffer.toString() );
	}
}

 

k를 먼저 출력하기 위해

StringBuffer에 담아서 한꺼번에 출력함

 

-------------------------------

 

하노이 탑 이동의 3 step
1. 작은 원반 n-1 개를 '1'에서 '2'로 이동
2. 큰 원반 1개를 '1'에서 '3'로 이동

3. 작은 원반 n-1개를 '2'에서 '3'로 이동

 

출처 : https://ko.wikipedia.org/wiki/%ED%95%98%EB%85%B8%EC%9D%B4%EC%9D%98_%ED%83%91#C

 

 

반응형