본문 바로가기

코딩테스트/파이썬

백준 11729번 하노이 탑 이동 순서

728x90

문제 설명

 

 

재귀함수의 인자로는 총 세 개를 설정했다. a에서 b로 n개 옮긴다는 뜻이다. n이 1이면 한 개만 옮기면 된다는 뜻이므로 a와 b를 출력했고 n이 1이 아닐 경우 a에서 b가 아닌 다른 쪽, 즉 6-a-b로 n-1개 옮긴 후 a에서 b로 옮긴 후 다시 6-a-b에서 b로 n-1개 옮기도록 했다.

 

 

전체 코드

def func(a,b,n):
    if n == 1:
        print("%d %d" % (a,b))
        return 0
    else:
        func(a,6-a-b,n-1)
        print("%d %d" % (a,b))
        func(6-a-b,b,n-1)
        return 0

def main():
    num = int(input())
    print(2 ** num - 1)
    func(1,3,num)

if __name__ == "__main__":
    main()
728x90
반응형