ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 11729번 : 하노이 탑 이동 순서
    알고리즘/백준(acmicpc.net) 문제풀이 2018. 6. 18. 10:14
    반응형

    이동 횟수는 dp로, 이동 순서는 재귀적으로 짜보았습니다.

    우선 이동 횟수부터.

    원판이 1개 있을 때의 이동 횟수는 1

    원판이 2개 있을 때의 이동 횟수는 3

    원판이 3개 있을 때의 이동 횟수는 7

    원판이 4개 있을 때의 이동 횟수는 15

    ...


    이것은 원판 N개가 1번에서 3번으로 이동할 때

    1) N-1개가 1번에서 2번으로 이동 / 이동 횟수 : dp[N-1]

    2) 가장 아래에 있던 원판이 1번에서 3번으로 이동 / 이동 횟수 : 1

    3) 2번에 옮긴 모든 원판을 다시 2번에서 3번으로 이동 / 이동 횟수 : dp[N-1]

    이런 순서로 됩니다.

    이동 횟수를 모두 세어보면 결국 2*dp[n-1]+1번이 됩니다.


    (사실 dp를 안세워도 이동 횟수는 2의 n제곱-1번과 같습니다)



    이제 이동 순서를 구해보겠습니다.

    원판을 이동시킬 때는 다음과 같은 규칙이 발생합니다.

    "N개를 a번에서 b번으로 (이때 남은 번호는 left) 이동하는 것은 N-1개를 a에서 left로 이동시키고 남은 1개를 a에서 b로 이동시키고, 이동시킨 N-1개를 left에서 b번으로 이동시킨 것과 같다."

    즉 이동하는 함수가 f(int N, int a, int b, int left)라고 할 때

    f(n - 1, a, left, b);

    f(1, a, b, left);

    f(n - 1, left, b, a);

    와 같다는 거죠.


    출력은 전달받은 N이 1일 때 a와 b를 순서대로 출력해주면 됩니다.





    반응형

    '알고리즘 > 백준(acmicpc.net) 문제풀이' 카테고리의 다른 글

    1047번 : 울타리  (0) 2022.01.09
    1074번 : Z  (0) 2018.07.11
    1436번 : 영화감독 숌  (0) 2018.06.18
    1107번 : 리모컨  (0) 2018.06.17
    2941번 : 크로아티아 알파벳 : 숏코딩버젼  (0) 2018.06.14

    댓글

Designed by Tistory.