이유's STUDY/알고리즘 문제풀이
[ 백준 ] 11729 - 하노이 탑 이동 순서
살아가는 이유_EU
2021. 8. 3. 15:41
728x90
반응형
하노이 탑 - 재귀문제에서도 정말 유명한 문제
핵심은 f(n) 일 경우
* 나머지 f (n-1) 의 탑들이 1번에서 2번으로 가고
* 남은 f(n) 의 가장 큰 탑이 3번으로 가고
* 그다음에 f(n-1) 의 탑들이 2번에서 3번으로 가야한다.
이처럼 재귀는 f(n) 과 f(n-1) 의 관계를 살펴보는 것이 핵심
그리고 answer 나 string builder sb 변수같은 경우에는 main class 안에 static 으로 선언해주었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int answer =0;
public static StringBuilder sb = new StringBuilder();
public static void hanoiTower(int from, int by, int to, int num) {
answer++;
if(num == 1) {
sb.append(from+" "+to).append('\n');
return;
}
else {
hanoiTower(from, to, by , num-1);
sb.append(from+" "+to).append('\n');
hanoiTower(by, from, to , num-1);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//하노이 탑 이동 순서
int N = Integer.parseInt(br.readLine());
// by 변수가
hanoiTower(1,2, 3, N );
System.out.println(answer);
System.out.println(sb);
}
}
좀 어려운 문제였지만 ㅠㅠ 다른 내용 참고를 하며 다행히 잘 풀렸다.
728x90
반응형