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 |