작성
·
11
·
수정됨
1
먼가 막연한 질문같아서 질문해도 될지 모르겠는데요..
hanoi(3, "A", "C", "B);
4개의 변수를 이용해서 함수를 호출하셨는데
강의에서 말하기전에 저 스스로
A에서 C로 원반을 옮기려면
1. 원반 3이 일단 C로 가야겠네
2. 그럴려면 원반 2가 기둥 B에먼저 가고, 원반 1이 나중에 올라와야겠네 .
2를 하려면 원반 1이 기둥 c에 가야겠네
이런 식으로 먼저 생각까지는 됐었는데
hanoi함수를 정의하기 까지의 과정을 어떤식으로 제가 해야할지 모르겠어서요...
4개의 매개변수와 4개의 매개 변수가 원반숫자, from, to, temp 를 의미하는것을 의미하면서 함수선언을 어떻게 할 수 있을까요..??
하위문제가 해결된상태에서 현재문제를 해결한다는 것은 이해가 되어서 앞선 강의 제곱, 스트링길이구하기 등.. 은 스스로 함수를 정의할 수 있었던것 같은데.. 하노이는 먼가 막연하게 암기하는 느낌이라서 여쭤봅니다.
답변 2
0
안녕하세요 짜파게티님!
하노이 예시를 보면서 막연한 느낌이 드신 것 같군요.
하노이는 재귀를 설명할 때 많이 사용되는 예시인데 아무래도 재귀에 익숙하지 않다면 짜파게티님 처럼 어렵게 느껴질 수 있는 부분이라 다른 강의에서는 이해가 쉬운 예시로 설명드린 것입니다.
문제를 함수로 정의하는 부분은 많은 예시와 문제를 풀어보는 수 밖에 없다고 생각합니다.
여러 알고리즘 문제에 재귀를 활용하는 것들이 있으니 이런 문제들을 접해보시고 막히면 해설도 함께 보시면서 스스로 재귀를 활용할 수 있는 능력을 키우는 방법밖에 없을 것 같습니다.😂
궁금증이 해결되셨나요?
0
안녕하세요, 인프런 AI 인턴입니다. 짜파게티님.
하노이탑 문제는 초기에는 어렵게 느껴질 수 있지만, 이를 단계별로 분해하여 이해하면 해결의 실마리를 찾을 수 있습니다. 하노이 탑 알고리즘에서 함수 hanoi(n, from, to, temp)
는 다음과 같은 개념에 기반하고 있습니다.
원반 수 n: 옮길 원반의 수입니다. 이 수가 재귀 호출의 바탕이 됩니다. 가장 처음 시작할 때는 hanoi(3, “A”, “C”, “B”)로 3개의 원반을 A에서 C로 옮기도록 정의합니다.
from: 원반의 출발 기둥입니다.
to: 원반의 도착 기둥입니다.
temp: 중간에 사용할 임시 기둥입니다.
하노이 탑 함수 선언은 재귀적인 생각에 근거하고 있습니다. 기본적인 원리는 n-1개의 원반을 중간 기둥으로 옮기고, 가장 큰 원반을 목표 기둥으로 이동시킨 뒤, 다시 n-1개의 원반을 목표 기둥으로 옮기는 것입니다.
이를 함수로 정의하려면:
기본 케이스: 원반이 하나인 경우, 그냥 그 원반을 from에서 to로 옮기면 됩니다. (n == 1 일 때)
재귀 케이스: n개의 원반을 옮길 때, 먼저 n-1개의 원반을 from에서 temp로 옮기고, nth 원반을 from에서 to로 옮긴 뒤, temp에서 n-1개의 원반을 to로 옮기는 식으로 정의하면 됩니다.
이렇게 하면 재귀적인 과정이 자동으로 처리되면서 문제를 해결할 수 있습니다. 간단히 말해, 함수 정의는 반복적으로 문제를 더 작은 부분으로 쪼개 해결하는 재귀의 본질과 동일합니다.
혹시 재귀에 대한 이해가 더 필요하시다면, 아래의 질문에서 관련 설명을 참고하실 수 있습니다:
- 이해가됐습니다…
- 다른 재귀문제를 몇몇 개 풀어봤지만 하노이탑은 그냥 형태를 기억해서 푸네요..
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다!!