質問: stdIn.nextInt(); move(n, 1, 3); } } ``` ### 試したこと 課題に対してアプローチしたことを記載してください ### 補足情報(言語/FW/ツール等のバージョンなど) Deque move(3, 1, 3); 開始 (3, 1, 3)プッシュ (2, 1, 2)プッシュ (1, 1, 3)プッシュ スタック 入り口 (1, 1, 3)(2, 1, 2)(3, 1, 3) 底 (1, 1, 3)ポップ (2, 1, 2)ポップ (1, 3, 2)プッシュ (1, 3, 2)ポップ (3, 1, 3)ポップ (2, 2, 3)プッシュ (1, 2, 1)プッシュ (1, 2, 1)ポップ (2, 2, 3)ポップ (1, 1, 3)プッシュ (1, 1, 3)ポップ 終了 このロジックを実現させたいです 円盤1がプッシュされた(ピークが円盤1)ならポップにする
回答: ``` import java.util.ArrayDeque; import java.util.Deque; import java.util.Scanner; class HanoiN { static void move(int no, int x, int y){ Deque stack = new ArrayDeque(); Deque xStack = new ArrayDeque(); Deque yStack = new ArrayDeque(); stack.push(no); xStack.push(x); yStack.push(y); while(!stack.isEmpty()){ if(no > 1){ stack.push(--no); xStack.push(x); yStack.push(6-x-y); y = 6-x-y; continue; } if(!stack.isEmpty()){ no = stack.pop(); x = xStack.pop(); y = yStack.pop(); System.out.printf("円盤%dを%d軸から%d軸へ移動\n", no, x, y); if(no > 1){ stack.push(--no); xStack.push(6-x-y); yStack.push(y); x = 6-x-y; continue; } } } } public static void main(String[] args){ Scanner stdIn = new Scanner(System.in); System.out.println("ハノイの塔"); System.out.print("円盤の枚数:"); int n = stdIn.nextInt(); move(n, 1, 3); } } ```