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 |