본문 바로가기
백준/분할정복

백준 11729. 하노이탑

by 29살아저씨 2021. 9. 6.
반응형

🅰 백준 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

댓글