문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 내용 : 아래 더보기
정답 코드 ) 재귀함수 사용
import java.util.*;
class Solution {
// 옮기는 방법을 저장할 리스트
private ArrayList<int[]> moveList = new ArrayList<>(); // [from, to]
public int[][] solution(int n) {
hanoi(n, 1, 3, 2);
int[][] answer = new int[moveList.size()][2];
// 결과 list를 배열에 저장
for(int i = 0; i < moveList.size(); i++) {
answer[i] = moveList.get(i);
}
return answer;
}
private void hanoi(int n, int from, int to, int middle) {
// 재귀 종료 조건
if(n == 1) {
moveList.add(new int[] {from, to});
return ;
}
// n - 1개의 원반을 중간 기둥으로 옮기기
hanoi(n - 1, from, middle, to);
// 가장 큰 원반을 목표 기둥으로 옮기기
moveList.add(new int[] {from, to});
// 중간 기둥에 있는 n-1개의 원판을 목표 기둥으로 옮기기
hanoi(n - 1, middle, to, from);
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/JAVA] K번째수 (0) | 2024.03.26 |
---|---|
[프로그래머스/JAVA] N-Queen (0) | 2024.03.25 |
[프로그래머스/JAVA] 소수 찾기 (0) | 2024.03.25 |
[프로그래머스/JAVA] 모의고사 (0) | 2024.03.22 |
[프로그래머스/JAVA] 최소직사각형 (0) | 2024.03.22 |