[백준 11729번][Python/파이썬] 하노이 탑 이동 순서

공학도 Lee·2023년 2월 8일
0

백준 문제 풀이

목록 보기
23/63

1. 문제


출처: 백준 11729번 하노이 탑 이동 순서

2. 풀이


원판이 1개라면 단순하게 세 번째 장대로 바로 옮기면 된다.

만약 원판이 NN개라면 어떻게 해야 할까?

  1. 위의 N1N - 1개의 원판을 보조로 사용할 2번에 옮겨 놓는다.
  2. NN번째 원판을 3번으로 옮긴다.
  3. 나머지 원판들을 2번에서 3번으로 옮기면 된다.

출발 장대, 도착 장대, 보조로 사용하는 장대를 매개변수로 가지는 함수를 만들고, 재귀적으로 접근하면 된다. (출발 장대와 도착 장대가 아닌 장대가 원판을 임시로 옮겨 놓는 즉, 보조로 사용하는 장대가 된다.)

3. 소스코드


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]))

4. 그 외


처음에 문제를 접했을 때에는, 전혀 감이 안 잡혀서 다른 분의 풀이를 봐도 어렵게 느껴졌다.

이제 와서, 글을 쓰기 위해 그림을 그려보니 감이 잡히는 듯하다.

확실히 그려보면서 정리를 하는 것이 내 것으로 만들기 위해선 참 중요하다.

profile
이창민, Changmin Lee

0개의 댓글