알고리즘

백준 11729번 하노이 탑 이동 순서(JAVA)

박카스마시며코딩 2022. 1. 27. 14:26

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