알고리즘/문제풀이
[백준/BOJ] 12946 하노이의 탑 - JAVA - Lv2
LIRI
2025. 4. 27. 22:52
[백준/BOJ] 12946 하노이의 탑 - JAVA - Lv2
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12946
문제 분석
조건
- 한 번에 한 개의 원판만 옮길 수 있다.
- 큰 원판이 작은 원판 위에 올라갈 수 없다.
- 세 개의 기둥을 이용해 모든 원판을 시작 기둥에서 목표 기둥으로 옮겨야 한다.
풀이방법
- 원판이 1개일 경우, 시작 기둥에서 목표 기둥으로 바로 옮긴다.
- 원판이 N개일 경우, 가장 큰 N번 원판을 목표 기둥으로 옮기기 위해 다음을 반복한다.
- N-1개의 원판을 보조 기둥으로 옮긴다.
- N번 원판을 목표 기둥으로 옮긴다.
- 보조 기둥에 있던 N-1개의 원판을 목표 기둥으로 옮긴다.
- 이 과정을 재귀적으로 반복하여 모든 원판을 이동시킨다.
코드
import java.util.*;
class Solution {
static List<int[]> list;
public int[][] solution(int n) {
list = new ArrayList<>();
hanoi(n,1,2,3);
int[][] answer = new int[list.size()][2];
for(int i = 0; i < list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
public void hanoi(int n, int from, int use, int to){
if(n == 1){
list.add(new int[]{from, to});
}else{
hanoi(n-1, from, to, use);
hanoi(1, from, use, to);
hanoi(n-1, use, from, to);
}
}
}
결과
728x90