https://www.acmicpc.net/problem/1914
1914번: 하노이 탑
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
저는 재귀를 통해 문제를 풀었습니다.
시작 가운데 목표 지점을 1,2,3이라 할 때 1에서 먼저 맨 밑에 제외하고 나머지는 2에 놓고, 맨 밑을 3에 넣고 2에 놓은 것을 3에 넣어야합니다. 이를 재귀적으로 풀어 문제를 풀었고, 20 이상인 경우에는 공식을 통해 문제를 풀어 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class BOJ_1914 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
if(n <= 20){
StringBuilder sb = new StringBuilder();
int result = cal(n,1,2,3,sb);
System.out.println(result);
System.out.println(sb);
}else{
BigInteger result = new BigInteger("1");
for(int i = 0 ; i < n ; i++){
result = result.multiply(new BigInteger("2"));
}
result = result.subtract(new BigInteger("1"));
System.out.println(result);
}
}
private static int cal(int n, int start, int temp, int end,StringBuilder sb) {
if(n == 0){
return 0;
}
int result = 1;
result += cal(n-1,start,end,temp,sb);
sb.append(start + " " + end + "\n");
result += cal(n-1,temp,start,end,sb);
return result;
}
}
'알고리즘' 카테고리의 다른 글
백준 7795번 먹을 것인가 먹힐 것인가 (JAVA) (0) | 2023.12.12 |
---|---|
백준 1654번 랜선 자르기 (JAVA) (1) | 2023.12.11 |
백준 1253번 좋다 (JAVA) (0) | 2023.12.09 |
백준 2667번 단지번호붙이기 (JAVA) (2) | 2023.12.08 |
백준 10162번 전자레인지 (JAVA) (1) | 2023.12.07 |