목록으로

Programming Notes

프로그래머스 기출문제 풀이: 계단 오르기

프로그래머스에서 자주 출제되는 동적 계획법 문제 중 하나인 '계단 오르기' 문제를 풀어보겠습니다. 문제는 간단합니다. n개의 계단을 오르는 방법의 수를 구하는 것입니다. 단, 한 번에 1계단, 2계단, 혹은 3계단씩만 오를 수 있다는 제약 조건이 있습니다. 예를 들어 3계단을...

프로그래머스에서 자주 출제되는 동적 계획법 문제 중 하나인 '계단 오르기' 문제를 풀어보겠습니다. 문제는 간단합니다. n개의 계단을 오르는 방법의 수를 구하는 것입니다. 단, 한 번에 1계단, 2계단, 혹은 3계단씩만 오를 수 있다는 제약 조건이 있습니다. 예를 들어 3계단을 오르는 방법은 1+1+1, 1+2, 2+1, 3 총 4가지가 있고, 4계단은 7가지 방법이 있습니다. 단순히 모든 경우의 수를 나열하는 방식으로는 계단 수가 커질수록 계산량이 기하급수적으로 늘어나 효율적이지 않습니다. 따라서 동적 계획법을 활용하여 효율적으로 문제를 해결해야 합니다.

동적 계획법의 핵심은 작은 문제의 해답을 저장해 두고, 큰 문제를 풀 때 이를 재활용하는 것입니다. 이 문제에서는 n계단을 오르는 방법의 수를 구하기 위해, n-1, n-2, n-3 계단을 오르는 방법의 수를 미리 계산해 저장합니다. n계단을 오르는 방법은 n-1계단에 1계단을 더 오르는 경우, n-2계단에 2계단을 더 오르는 경우, n-3계단에 3계단을 더 오르는 경우를 모두 합한 것과 같습니다. 즉, n계단 오르는 경우의 수 = (n-1계단 오르는 경우의 수) + (n-2계단 오르는 경우의 수) + (n-3계단 오르는 경우의 수) 라는 점화식을 세울 수 있습니다.

코드 구현에서는 배열을 사용하여 각 계단까지 오르는 방법의 수를 저장합니다. 1계단을 오르는 경우의 수는 1, 2계단은 2(1+1, 2), 3계단은 4(1+1+1, 1+2, 2+1, 3)가 됩니다. 이 값들을 초기값으로 설정하고, 점화식을 이용하여 4계단부터 n계단까지의 경우의 수를 순차적으로 계산합니다. 마지막으로 n계단까지 오르는 방법의 수를 반환하면 문제가 해결됩니다. 이러한 동적 계획법을 통해 시간 복잡도를 O(n)으로 줄일 수 있습니다. 만약 단순히 모든 경우의 수를 탐색하는 방식을 사용했다면 시간 복잡도가 기하급수적으로 증가하여 큰 n값에 대해서는 계산이 불가능했을 것입니다.

결론적으로, 이 문제는 동적 계획법을 이용하여 효율적으로 해결할 수 있는 대표적인 예시입니다. 작은 문제의 해를 저장하고 재활용함으로써, 시간 복잡도를 크게 줄이고 효율적인 알고리즘을 구현할 수 있습니다. 이 문제를 통해 동적 계획법의 개념과 활용 방법을 명확하게 이해할 수 있을 것입니다. 다른 유사한 문제에도 동적 계획법을 적용해 보면서 문제 해결 능력을 향상시키는 것을 추천합니다.