#Algorithm
문제 번호
1914 하노이탑(G5)
알고리즘 + 이론
DP?인가 파이썬 배열 참조 이슈 때문에 gemini의 도움을 받음
정답 코드
# 1914번 하노이탑
# 재귀라고?
# 2개일 경우
# 1 2
# 1 3
# 2 3
# 3개일 경우
# 1 3
# 1 2
# 3 2
# 1 3
# 2 1
# 2 3
# 1 3
# 처음에 기존 배열에서 2이면 3으로 3이면 2로 바꾸고
# 다 바꾸고 [1,3]을 추가하고 기존배열을 다시 1이면 2로 2이면 1로 바꾼 배열을 추가
import copy
array = [[1,2],[1,3],[2,3]]
result = [[1,2],[1,3],[2,3]]
N = int(input())
print(2**N-1)
if N <= 20:
# 1개일 때의 초기 이동 경로
path = [[1, 3]]
# 2개부터 N개까지 빌드업
for _ in range(2, N + 1):
# (n-1) 단계를 '출발->보조'로 이동: 2번과 3번 기둥을 서로 바꿈
part1 = [[(3 if v == 2 else 2 if v == 3 else v) for v in move] for move in path]
# 가장 큰 원판을 '출발->도착'으로 이동: [1, 3] 고정
mid = [[1, 3]]
# (n-1) 단계를 '보조->도착'으로 이동: 1번과 2번 기둥을 서로 바꿈
part2 = [[(2 if v == 1 else 1 if v == 2 else v) for v in move] for move in path]
# 세 부분을 합쳐서 새로운 path 생성 (기존 path는 버려짐 -> 참조 완전 분리)
path = part1 + mid + part2
for move in path:
print(*move)
느낀점 & 피드백
이 글이 도움이 되셨나요?