-
[백준 1914] 하노이 탑[공부] 코테/백준 2024. 3. 14. 15:19
https://www.acmicpc.net/problem/1914
1914번: 하노이 탑
세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로
www.acmicpc.net
예를 들어 원판의 개수 N이 3이라면 아래와 같이 총 7번의 옮김이 필요하다.
위의 그림을 생각하며 포인트를 잡자면,
・ 장대1에 있는 마지막 1개의 원판을 장대3으로 옮겨야 한다.
・ 그럼 장대1에 있는 K-1개의 원판을 중간 기둥으로 옮겨야 한다.
・ 마지막으로 장대2로 옮겨놨던 K-1개의 원판을 다시 장대3으로 옮긴다.
"하노이 타워의 원판 이동 횟수" 라고 검색을 하면, 공식은 2^K - 1
코드로 나타내면 아래와 같다.BigInteger bi = new BigInteger("2"); BigInteger a = bi.pow(K).subtract(BigInteger.ONE);
import java.math.BigInteger; import java.util.Scanner; // 1914번 : 하노이 탑 public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int k = sc.nextInt(); BigInteger bi = new BigInteger("2"); BigInteger result = bi.pow(k).subtract(BigInteger.ONE); System.out.println(result); if (k<=20) { // n이 20 이하일 때만 하노이 탑 이동 과정 출력 hanoi(k, 1, 2, 3); } } // 하노이 탑 이동 순서 출력하는 메소드 static void hanoi(int k, int start, int mid, int end) { if (k==1) { System.out.println(start + " " + end); return; } hanoi(k-1, start, end, mid); System.out.println(start + " " + end); hanoi(k-1, mid, start, end); } }
'[공부] 코테 > 백준' 카테고리의 다른 글
[백준 1978] 소수 찾기 (0) 2024.03.14 [백준 2869] 달팽이는 올라가고 싶다 (0) 2024.03.12 [백준 1152] 단어의 개수 (0) 2024.03.12