Climbing Stairs 문제 basecase 생각하는 방법
25
11 asked
안녕하세요. DP Climbing Stairs 문제 풀이에서 질문이 있습니다.
basecase로 f(0)=1, f(1)=1 조건을 주셨는데요. f(1)=1, f(2)=2 로 해도 값이 동일하더라고요. 결국 초기값 2개만 지정하면 되는건가? 싶었습니다.
저는 계단을 1칸, 2칸을 갈 수 있는게 최소 케이스라고 생각하고, f(1), f(2)를 정의했는데 f(0) 부터 지정한 이유가 궁금합니다.
이 기준을 잡는 포인트는 어떻게 생각해낼 수 있을까요? 점화식이 f(n-1)+f(n-2) 이니 초기 0,1(혹은 1,2)번째 값을 알면 풀린다. 라고 접근하는 게 맞을까요?
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. 송유진님 질문 주셔서 감사합니다.
Climbing Stairs 문제에서의 초기 조건(Base case) 설정에 대해 설명드리겠습니다. 이 문제는 계단을 오르는 데 필요한 방법의 수를 동적 계획법(DP)을 사용하여 계산하는 전형적인 문제입니다.
f(0) 부터 시작한 이유:
- f(0)=1로 두는 이유는, ‘시작점에서 아무런 움직임 없이 그 자리에 있을 때 방법의 수는 한 가지’라는 것을 의미합니다. 즉, 어떤 작업도 하지 않았을 때의 경우를 고려한 것입니다.
- 문제의 정의 자체에서 시작점을 ‘계단을 오르지 않는 상태’로 본다면 f(0)=1이 타당할 수 있습니다. 프로그램적 측면이나 재귀적 정의로 봤을 때 시작점을 초기화하는 것이 코드 설계에 간편함을 제공하기도 합니다.
- f(0)=1로 두는 이유는, ‘시작점에서 아무런 움직임 없이 그 자리에 있을 때 방법의 수는 한 가지’라는 것을 의미합니다. 즉, 어떤 작업도 하지 않았을 때의 경우를 고려한 것입니다.
초기 조건을 결정하는 기준:
- 점화식이 f(n) = f(n-1) + f(n-2)로 주어지는 경우, 최소 두 개의 값을 정의해야 합니다. 이는 점화식이 두 이전 값을 필요로 하기 때문입니다.
- f(1), f(2)를 초기 조건으로 설정하면, 이후 문제를 해결하는 데 필요한 모든 중간 값을 계산할 수 있습니다.
- 초기 조건 설정은 문제의 상태(여기서는 ‘계단을 오르는’ 문제)의 가장 기초적인 ‘가능한 동작(혹은 상태)‘를 기반으로 설정하는 것에서 시작합니다.
- 따라서 이 기준은 선택의 문제라기보다는 문제 자체의 특성에 따라 결정됩니다. 가장 기본부터 문제를 확장하는 방향으로 초기 조건을 설정합니다.
- 점화식이 f(n) = f(n-1) + f(n-2)로 주어지는 경우, 최소 두 개의 값을 정의해야 합니다. 이는 점화식이 두 이전 값을 필요로 하기 때문입니다.
이 접근 방법은 알고리즘 문제 해결 특히, DP 문제를 다루는 데 있어 매우 중요합니다. 초기값을 잘 설정하면 문제 해결이 자연스럽게 이어지기 때문에 몇 번의 예제를 통해 익숙해지는 것이 좋습니다.
유사한 질문과 답변을 참고하실 수 있는 링크도 있습니다:
- 동적계획법 초기값 설정 관련 토론
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
잠겨버린 사물함 시간초과 관련 질문입니다.
0
16
1
DFS/BFS
1
33
2
노션 링크 질문드립니다!
0
65
3
[문제풀이] network delay time
0
59
2
위상정렬 구현 관련
0
72
3
코딩테스트를 위한 JAVA 질문 있습니다!
0
85
1
점진적과부하 문제 - 시간 초과 오류
0
80
2
예제 2번 오류
0
77
2
part5 홍팀청팀 테스트케이스 오류
1
79
1
코테 사이트 네트워크 연결....
1
85
2
DP-다익스트라
0
72
2
코테 사이트 네트워크 연결 문제 확인 부탁드립니다.
2
87
2
코테 사이트에 접속이 안됩니다.
0
92
2
노션 링크가 어디있나요?
0
103
2
정답과 동일하게 작성 후 실행 또는 제출했음에도 시간초과
0
93
4
part6. 구름의 개수 풀이 시간초과 이유
0
79
2
DFS vs BFS 중 BFS 추천해주신 것 관련 질문
1
74
2
part5. 청팀홍팀 풀이 질문 드립니다.
0
85
3
추후 학습 계획 질문
0
80
1
자바 정렬
0
47
2
코테의 바이블(java) 와 해당 강의 차이
0
109
2
커리큘럼 관련 질문
0
72
1
queue에 값을 추가하는 메서드는 어떤 차이가 있나요?
0
81
1
부분집합 전역변수 질문
0
51
2

