def get_tower_of_hanoi_solution(height, from_tower, to_tower, helper_tower):
    pass

"""
Explanation: 1번 문제_하노이의 탑
recursive function - tower of Hanoi
"하노이 탑" 문제를 해결하는 파이썬 함수를 작성하세요.
하노이의 탑(Tower of Hanoi)은 퍼즐의 일종이다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다.

한 번에 하나의 원판만 옮길 수 있다.
큰 원판이 작은 원판 위에 있어서는 안 된다.
End of explanation
"""


def hanoi(height, from_tower, to_tower, helper_tower):
    if height >= 1:
        # 1. n-1 개를 from 에서 helper로 옮긴다.
        hanoi(height-1, from_tower, helper_tower, to_tower)
        
        #2. n번째 마지막 원판을from에서 to로 옮긴다.
        print("{from_tower}에서 {to_tower}로 {height}번째 원판을 이동한다".format(
            from_tower = from_tower,
            to_tower = to_tower,
            height = height,
        ))
        
        #3. n-1개를 helper에서 to로 옮긴다.
        hanoi(height-1, helper_tower, to_tower, from_tower)

hanoi(3, "A", "B", "C")

"""
Explanation: get_tower_of_hanoi_solution(3, "A", "B", "C")
A 에서 B 로 1 번째 원판을 옮깁니다.
A 에서 C 로 2 번째 원판을 옮깁니다.
B 에서 C 로 1 번째 원판을 옮깁니다.
A 에서 B 로 3 번째 원판을 옮깁니다.
C 에서 A 로 1 번째 원판을 옮깁니다.
C 에서 B 로 2 번째 원판을 옮깁니다.
A 에서 B 로 1 번째 원판을 옮깁니다.
End of explanation
"""


