본문으로 바로가기

백준 11729 하노이탑 java

category Algorithm by java 2020. 1. 3. 15:37

https://www.acmicpc.net/problem/11729

 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5

www.acmicpc.net

 

 

 

 

 

import java.util.Scanner;
public class Main {

	static StringBuilder sb = new StringBuilder();
	static int count = 0;

	// from : 출발지 
	// to: 목적지   
	// other: 둘다 아닌 곳
	public static void hanoi(int n, int from, int to, int other) {
		if (n == 0)
			return;
		else {
			count++;
			hanoi(n - 1, from, other, to);
			//1. 출력 예시처럼 3개의 탑이 있다면, 2개의 탑을 목적지가 아닌곳으로 옮겨 놓음
			sb.append(from + " " + to + "\n");
			//2. 마지막 남은 탑을 목적지로 옮김.
			hanoi(n - 1, other, to, from);
			//3. 목적지가 아닌 곳 에 옮겨놓았던 탑들을 목적지로 옮김
		
		
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();

		hanoi(n, 1, 3, 2);

		System.out.println(count);
		System.out.println(sb);

	}

}

'Algorithm by java' 카테고리의 다른 글

백준 9375 java 패션왕 신해빈  (0) 2020.02.03
백준 1181 단어 정렬 java  (0) 2020.01.23
백준 14889번 스타트와 링크java  (0) 2019.12.28
백준 2580 스도쿠 java  (0) 2019.12.26
백준 1987번 java 알파벳  (1) 2019.12.23