728x90
아래처럼 풀었더니 1sec , 430 msec 가 떠서 런타임 오류가 발생하였다. 그래서 StringBuild로 풀기로 하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Hanoi {
static int count = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
System.out.println((int) (Math.pow(2, N) - 1));
MoveToTower(N, 1, 3, 2);
}
static void MoveToTower(int N, int start, int end, int mid) {
if (N == 1) {
System.out.println(start + " " + end);
return;
}
// 원판 N-1개를 중간 기둥으로 이동
MoveToTower(N - 1, start, mid, end);
// N번째 원판을 목표 기둥으로 이동
System.out.println(start + " " + end);
// 중간 기둥에 있던 N-1개 원판을 목표 기둥으로 이동
MoveToTower(N - 1, mid, end, start);
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Hanoi {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
// 전체 이동 횟수 출력 (2^N - 1)
sb.append((int) (Math.pow(2, N) - 1)).append('\n');
MoveToTower(N, 1, 3, 2);
System.out.println(sb.toString());
}
static void MoveToTower(int N, int start, int end, int mid) {
if (N == 1) {
sb.append(start).append(" ").append(end).append('\n');
return;
}
// 원판 N-1개를 중간 기둥으로 이동
MoveToTower(N - 1, start, mid, end);
// N번째 원판을 목표 기둥으로 이동
sb.append(start).append(" ").append(end).append('\n');
// 중간 기둥에 있던 N-1개 원판을 목표 기둥으로 이동
MoveToTower(N - 1, mid, end, start);
}
}
728x90
'백준' 카테고리의 다른 글
백준 10799 - Java (0) | 2024.09.15 |
---|---|
백준 17413 - Java (0) | 2024.09.15 |
백준 2447 - Java (0) | 2024.09.14 |
백준 10870 - Java (0) | 2024.09.14 |
백준 27433 - Java (0) | 2024.09.14 |