Algorithm

백준 11729번: 하노이 탑 이동순서

ej503 2023. 1. 16. 11:51

[백준 저지 링크]

 

11729번: 하노이 탑 이동 순서

세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로

www.acmicpc.net

 

재귀에 수열을 얹은 문제입니다. 

복잡한 풀이는 아니지만 수열 점화식을 만들고 재귀함수를 구현하는 아이디어를 착안해야 하는 문제입니다.

 

[정답 코드 - Java]

 

import java.io.*;
import java.io.IOException;


public class Main {
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        bw.write((int) (Math.pow(2, N) - 1) +"\n");

        Hanoi(N, 1, 2, 3);

        bw.flush();
        bw.close();
        br.close();

    }
    public static void Hanoi(int N, int start, int mid, int to) throws IOException {
        // 원판이 1개라면?
        if (N == 1) {
            bw.write(start + " " + to + "\n");
            return;
        }
        // A -> C로 옮길 때,
        // A -> B로 N-1개를 옮긴다면?
        Hanoi(N-1, start, to, mid);
        // A -> C로 원판 1개를 옮긴다면?
        bw.write(start + " " + to + "\n");
        // B -> C로 N-1개를 옮긴다면?
        Hanoi(N-1, mid, start, to);
    }

}

 

'Algorithm' 카테고리의 다른 글

백준 15649, 15650, 15651, 15652번: N과 M 시리즈  (0) 2023.01.26
백준 10835번: 카드게임  (0) 2023.01.17