[프로그래머스] 하노이의 탑 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/12946
입력 : 1번 기둥에 있는 원판의 개수 n (1 ≤ n ≤ 15)
출력 : n개의 원판을 3번 원판으로 최소로 옮기는 방법의 2차원 배열
O(2^n)
스택
없음
없음
queue.poll() : 큐의 첫 번째 요소를 삭제 및 반환한다
구현
import java.util.*;
class Solution {
public int[][] solution(int n) {
List<int[]> answer = new ArrayList<>();
Stack<int[]> stack = new Stack<>();
Queue<int[]> queue = new LinkedList<>();
stack.push(new int[]{n, 1, 3, 2}); // 초기 상태
while (!stack.isEmpty()) {
int[] current = stack.pop();
int disks = current[0];
int from = current[1];
int to = current[2];
int aux = current[3];
if (disks == 1) {
queue.add(new int[]{from, to});
} else {
stack.push(new int[]{disks - 1, aux, to, from});
stack.push(new int[]{1, from, to, aux});
stack.push(new int[]{disks - 1, from, aux, to});
}
}
while (!queue.isEmpty()) {
answer.add(queue.poll());
}
int[][] result = new int[answer.size()][2];
for (int i = 0; i < answer.size(); i++) {
result[i] = answer.get(i);
}
return result;
}
}