백준/분할정복
백준 11729. 하노이탑
29살아저씨
2021. 9. 6. 17:47
반응형
🅰 백준 11729. 하노이탑
✏️ 문제 풀이
✏️ 소스코드
package divideandconquer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
/*sysout을 사용하면 안되고 bufferedwriter를 사용해서 한번에 출력해줘야한다.
* 하노이탑의 최소 이동 순서 = 2^N-1*/
public class Main_실버2_11729_하노이탑 {
private static int cnt;
private static StringBuilder sb = new StringBuilder();
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static void hanoi(int n, int start, int temp, int dest) throws IOException {
if (n == 0)
return;
// 자신의 위쪽의 n-1개 원판 들어내기: 임시기둥 옮기기
hanoi(n - 1, start, dest, temp);
// 자신의 원판 옮기기: 목적기둥
bw.write(start + " " + dest + "\n");
cnt++;
// 들어냈던 임시기둥의 n-1개 원판 자신위에 쌓기: 목적기둥으로 옮기기
hanoi(n - 1, temp, start, dest);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
bw.write(Integer.toString((int)Math.pow(2, N)-1)+"\n");
hanoi(N, 1, 2, 3);
bw.flush();
}
}
✅ 후기
반응형