https://www.acmicpc.net/problem/11729
11729번: 하노이 탑 이동 순서
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
저는 해당 문제를 재귀를 이용하여 문제를 해결하였습니다.
문제를 부분적으로 나눠본다면 1에서 맨맽의 원반을 제외한 원반들을 2로 옮기고 맨 밑의 원반을 3으로 옮기고 2에 있는 원반들을 3으로 옮겨야합니다.
즉 from(1)에서 mid(2)로 맨밑을 빼고 전부 옮기고 from(1)에서 to(3)으로 맨밑의 것을 옮기고 다시 mid(2)에서 to(3)으로 2에 존재하는 모든 원반들을 옮겨야 합니다.
package BOJ.Recursion;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;
public class BOJ_11729 {
static private int hanoi(int depth, int from, int to, int mid, StringBuilder sb){
if(depth == 0){
return 0;
}
int result = 1;
result += hanoi(depth-1, from, mid, to,sb);
sb.append(from+" "+to+"\n");
result += hanoi(depth-1, mid, to, from,sb);
return result;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringTokenizer st = new StringTokenizer(br.readLine());
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(br.readLine());
StringBuilder sb = new StringBuilder();
System.out.println(hanoi(n,1,3,2, sb));
System.out.println(sb.toString());
}
}
'알고리즘' 카테고리의 다른 글
백준 1941번 소문난 칠공주 (JAVA) (0) | 2022.01.29 |
---|---|
백준 12919번 A와B 2(JAVA) (0) | 2022.01.28 |
백준 16927번 배열 돌리기2 (JAVA) (0) | 2022.01.27 |
백준 1043번 거짓말 (JAVA) (0) | 2022.01.26 |
백준 2467번 용액 (JAVA) (0) | 2022.01.25 |