문제

https://www.acmicpc.net/problem/11729

풀이

하노이 탑에 대해서는 위키를 참고하자.
문제의 출력 예시에서 규칙을 찾아낼 수 있다.
하노이 탑 봉을 left, mid, right로 표기하고 설명하겠다.

# 입력 예시
3

# 출력 예시
7
1 3 #1
1 2 #2
3 2 #3
1 3 #4
2 1 #5
2 3 #6
1 3 #7
  • #1~#3: left -> right -> mid 를 거쳐서 n-1개의 원판을 옮긴다.
  • #4: 가장 큰 n번 원판을 최종 목적지 right로 옮긴다.
  • #5~#7: mid -> left -> right 를 거쳐서 n-1개의 원판을 옮긴다.

3개의 과정을 재귀로 표현하면 완성된다.

def hanoi(n, left, mid, right, answer):
    if n == 1: answer.append(str(left) + " " + str(right))
    else:
        hanoi(n-1, left, right, mid, answer) # 1~3 과정
        answer.append(str(left) + " " + str(right)) # 4 과정
        hanoi(n-1, mid, left, right, answer) # 5~7 과정

N = int(input())
answer = []
hanoi(N, 1, 2, 3, answer)
print(len(answer))
for a in answer:
    print(a)

댓글남기기