원판이 1개라면 단순하게 세 번째 장대로 바로 옮기면 된다.
만약 원판이 개라면 어떻게 해야 할까?
출발 장대, 도착 장대, 보조로 사용하는 장대를 매개변수로 가지는 함수를 만들고, 재귀적으로 접근하면 된다. (출발 장대와 도착 장대가 아닌 장대가 원판을 임시로 옮겨 놓는 즉, 보조로 사용하는 장대가 된다.)
num = int(input())
record =[]
def hanoi(n,from_pos,to_pos,aux_pos):
if n ==1:
record.append([from_pos,to_pos])
return
# 1번 과정
hanoi(n-1,from_pos,aux_pos,to_pos)
# 2번 과정
record.append([from_pos,to_pos])
# 3번 과정
hanoi(n-1,aux_pos,to_pos,from_pos)
hanoi(num,1,3,2)
print(len(record))
for i in record:
print("{} {}".format(i[0],i[1]))
처음에 문제를 접했을 때에는, 전혀 감이 안 잡혀서 다른 분의 풀이를 봐도 어렵게 느껴졌다.
이제 와서, 글을 쓰기 위해 그림을 그려보니 감이 잡히는 듯하다.
확실히 그려보면서 정리를 하는 것이 내 것으로 만들기 위해선 참 중요하다.