자바스크립트 5줄로 계단 문제를 해결하는 방법
계단 프로그래밍 챌린지가 무엇인가요?
간단히 말해서....
N
계단이 있는 계단을 상상해 보십시오. 한 번에 1, 2, 3단계를 걸을 수 있다면 계단 꼭대기에 도달할 수 있는 방법은 몇 가지입니까?이런 문제를 처음 접하는 것은 확실히 두려운 일입니다. 수학 문제 자체로도 정말 어렵습니다.
몇 가지 분명한 경우가 있습니다. 한 번에 1걸음씩
N
번 걸을 수 있습니다. N
가 2로 나누어지면 2단계를 N/2
번 수행할 수 있습니다. 또한 N
가 3으로 나누어지면 3단계를 N/3
번 수행할 수 있습니다.그리고 그 사이에 모든 것이 있습니다. 🤔
좋은 소식은 모두가 좋아하는 알고리즘인 재귀를 사용하여 이 문제를 해결할 수 있는 정말 간단한 방법이 있다는 것입니다. 😨
구조에 대한 재귀
약속한 대로 여기에 5줄의 JavaScript 코드로 된 해결책이 있습니다...
// N is total number of steps in the staircase
// stepTaken is a counter for steps taken in each combination
function steps(N, stepsTaken = 0) {
if (stepsTaken === N) return 1;
else if (stepsTaken > N) return 0;
return steps(N,stepsTaken + 1) + steps(N,stepsTaken + 2) + steps(N,stepsTaken + 3);
}
이런! 이것은 무엇을 의미 하는가??
*위의 코드가 혼란스러워도 당황하거나 기분 나빠하지 마세요. * 고등학교 CS 시간에 재귀를 처음 배운 이후로 오랫동안 재귀와 씨름했습니다. 확실히 까다 롭습니다. * 그러나 일단 이해하면 완전히 새로운 가능성의 세계가 열립니다!*
이 솔루션을 살펴보겠습니다.
위의 솔루션을 그대로 복사하고 떠날 생각이라면 요점을 놓치고 있는 것입니다. 무슨 일이 일어나고 있는지 이해하는 것이 매우 중요합니다.
function steps(N, stepsTaken = 0)
는 단순한 재귀 카운터입니다.살펴보겠습니다.
stepsTaken = 0
. stepsTaken
변수를 휴대할 수 있습니다.귀하와 귀하의 클론은 각각 다음 '문' 중 하나를 통과합니다(각각 다른 문을 통과해야 함).
steps(N,stepsTaken + 1)
steps(N,stepsTaken + 2)
steps(N,stepsTaken + 3)
선택한 문을 통과하면 개인
stepsTaken
카운터가 1, 2 또는 3씩 증가합니다(통과한 문에 따라). 그런 다음 즉시 3개의 문이 더 표시됩니다.steps(N,stepsTaken + 1)
steps(N,stepsTaken + 2)
steps(N,stepsTaken + 3)
다시, 자신을 2번 복제하고 각각 이 문
steps
중 하나를 통과합니다. 귀하의 stepsTaken
카운터는 다시 1, 2 또는 3씩 증가합니다. 이는 다음까지 계속됩니다. if (stepsTaken === N) return 1;
else if (stepsTaken > N) return 0;
넘어진 경우
stepsTaken > N
, 계단 조합은 계단을 오르는 고유한 방법의 합계에 포함되지 않습니다.그러나
if (stepsTaken === N)
, 빙고 🤩 당신은 계단을 오르는 합법적인 콤보를 찾았고 당신return 1
은 계단을 오르는 방법의 수에 추가합니다.stepsTaken
계단의 꼭대기에 도달하기 위해 N
의 가능한 조합 수를 세는 방법은 단순히 모든 가능성을 추가하는 것입니다.return steps(N,stepsTaken + 1) + steps(N,stepsTaken + 2) + steps(N,stepsTaken + 3);
if (stepsTaken === N) return 1
및 경로가 유효하지 않은 경우(오버스텝) 각각 0이 반환되는 각각의 적법한 단계 콤보를 기억하십시오: else if (stepsTaken > N) return 0
.여러분 중 일부는 다음과 같이 질문할 수 있습니다. 좋습니다. 이것은 우아하지만 시간 복잡도 측면에서 매우 비효율적이지 않습니까?
예, 매우 높은 시간 복잡도입니다. 하지만 그것을 획기적으로 개선하는 비결이 있습니다 ➡️ How to Solve the Staircase Problem with JavaScript using Memoization
이것이 의미가 있기를 바랍니다. 질문이 있으면 아래에 의견을 말하십시오.
이 기사가 마음에 드셨다면 제 블로그Indepth JavaScript에서 더 많은 정보를 얻으실 수 있습니다. 🤓
Reference
이 문제에 관하여(자바스크립트 5줄로 계단 문제를 해결하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/apmfree78/how-to-solve-the-staircase-problem-with-5-lines-of-javascript-50ag텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)