Computer Science/백준

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

Dior2ky 2020. 2. 3. 18:20
반응형

백준 11729번 재귀로 유명한 하노이의 탑 문제이다.

문제는 다음과 같다. 일반적인 하노이의 탑 문제이다. 

입력값과 출력값, 예제가 주어져 있다. 

출력은 총 움직인 횟수를 먼저 출력하고 움직임을 하나씩 출력하도록 되어있다. 

언어는 ruby를 사용하여 프로그래밍 하였다. 

def move(n,st,en,si)
    if n == 2
        puts "%d %d" %[st, si]
        puts "%d %d" %[st, en]
        puts "%d %d" %[si, en]
        return
    end
    move(n-1, st, si, en)
    puts "%d %d" %[st, en]
    move(n-1, si, en, st)
end


a = gets()
a = a.to_i
sum = 1
for i in 0...a-1
    sum = sum * 2 + 1
end
puts sum
move(a, 1, 3, 2)

다음과 같이 재귀를 사용하여 프로그래밍 했지만 계속해서 런타임 오류가 발생했다.

문제가 무엇인지 몰라 5번을 런타임오류를 띄웠다. ㅎ

문제를 알고보니 입력값 조건을 제대로 보지 않았다.

입력값 1 에 대한 처리를 해주지 않았던 것!

def move(n,st,en,si)
    if n == 1
        puts "%d %d" %[st, en]
        return
    elsif n == 2
        puts "%d %d" %[st, si]
        puts "%d %d" %[st, en]
        puts "%d %d" %[si, en]
        return
    end
    move(n-1, st, si, en)
    puts "%d %d" %[st, en]
    move(n-1, si, en, st)
end


a = gets()
a = a.to_i
sum = 1
for i in 0...a-1
    sum = sum * 2 + 1
end
puts sum
move(a, 1, 3, 2)

다음과 같이 코드를 수정해 주었고 맞았습니다 !! 를 띄울 수 있었다.

반응형