[Programmers] 하노이의 탑 - 연습문제 (Recursive)

동민·2021년 3월 11일
import java.util.ArrayList;

// 하노이의 탑 - 연습문제 (Recursive)
public class HanoiTop {
	private static ArrayList<int[]> list;

	public int[][] solution(int n) {
		list = new ArrayList<>();
		hanoi(n, 1, 3, 2); // 원판의 개수, 출발지(시작지점), 목적지, 경유지
		int[][] answer = new int[list.size()][2];
		for (int i = 0; i < answer.length; i++) {
			answer[i][0] = list.get(i)[0];
			answer[i][1] = list.get(i)[1];
		}
		return answer;
	}

	private void hanoi(int n, int from, int to, int via) { // 원판의 개수, 출발지, 목적지, 경유지
		int[] arr = { from, to };
		if (n == 1) { // 원판의 개수가 1개일 때, 출발지에서 목적지로 옮긴 후 종료
			list.add(arr);
			return;
		}
		hanoi(n - 1, from, via, to); // n-1개의 원판을 출발지에서 경유지로 옮기는 재귀호출 (목적지를 경유지로 사용)
		list.add(arr); // 출발지에 있는 1개의 원판을 목적지로 옮김
		hanoi(n - 1, via, to, from); // n-1개의 원판을 경유지에서 목적지로 옮기는 재귀호출 (출발지를 경유지로 사용)
	}
}

https://velog.io/@hyeon930/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%95%98%EB%85%B8%EC%9D%B4%EC%9D%98-%ED%83%91-Java 참고

profile
BE Developer

0개의 댓글