반응형
🅰 백준 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();
}
}
✅ 후기
반응형
'백준 > 분할정복' 카테고리의 다른 글
백준 1992. 쿼드트리 (0) | 2021.09.06 |
---|---|
백준 1780. 종이의 개수 (0) | 2021.09.06 |
백준 2447. 별찍기 10 (0) | 2021.09.06 |
백준 2448. 별찍기 11 (0) | 2021.09.06 |
백준 11728. 배열합치기 (0) | 2021.09.06 |
댓글