문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
없음
풀이
n개의 원판을 1번에서 3번으로 옮기려면
제일 큰 원판을 제외한 n-1개의 원판을 2번으로, 제일 큰 원판을 3번으로 옮긴 후
2번에 있던 n-1개의 원판들을 다시 3번으로 옮겨야한다.
이를 위해서 n-1 개의 원판을 1번에서 2번으로 옮기는 작업이 필요한데
이는 위와 마찬가지로 제일 큰 원판을 제외한 n-2개의 원판을 3번으로 옮기고, 제일 큰 원판을 2번으로 옮긴 후
3번에 있던 나머지 n-2개의 원판들을 다시 2번으로 옮겨야한다.
결국 n개의 원판을 옮기는 문제는 1개의 원판을 옮기는 문제로 분해된다.
따라서 재귀적으로 원판들을 임시 기둥으로 옮기고 옮긴 기둥 번호를 리스트에 삽입한 후 임시 기둥에서 최종 기둥으로 원판을 옮긴다.
코드
import java.util.*;
class Solution {
ArrayList<Integer[]> answer;
public ArrayList<Integer[]> solution(int n) {
answer = new ArrayList<>();
hanoi(n, 1, 2, 3);
return answer;
}
public void hanoi(int n, int start, int temp, int end) {
if(n==0) return;
hanoi(n-1, start, end, temp);
answer.add(new Integer[]{start, end});
hanoi(n-1, temp, start, end);
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] N-Queen (Java) (0) | 2022.11.05 |
---|---|
[프로그래머스] 행렬의 곱셈 (Java) (0) | 2022.11.05 |
[프로그래머스] 피보나치 수 (Java) (0) | 2022.11.05 |
[프로그래머스] 최댓값과 최솟값 (Java) (0) | 2022.11.05 |
[프로그래머스] 줄 서는 방법 (Java) (0) | 2022.11.05 |