Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- RxJS 마블 다이어그램
- Observable vs Array
- RxJS 에러 처리
- 개발자커뮤니케이션
- React 리렌더링 최적화
- RxJS 생성 오퍼레이터
- React hooks 남용 사례
- RxJS 결합 오퍼레이터
- 자바스크립트 고차 함수 vs Observable
- leedcode
- RxJS 함수형 프로그래밍
- React useMemo 사용법
- DaleStudy
- contains duplicate
- 알고리즘
- 스쿼드조직
- leetcode
- RxJS 오퍼레이터
- useCallback 성능 최적화
- React useEffect 안티패턴
- 알고리즘스터디
- React 성능 최적화 방법
- 달래스터디
- Climbing Stairs
- RxJS 멀티캐스팅
- Blind75
- RxJS 변환 오퍼레이터
- React useCallback 사용법
- 협업문화
- useMemo 성능 최적화
Archives
- Today
- Total
수쿵의 IT월드
DaleStudy | Leetcode Study 2주차 - Climbing Stairs 본문

문제
You are climbing a staircase. It takes n steps to reach the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
Example 1:
Input: n = 2
Output: 2
Explanation: There are two ways to climb to the top.
1. 1 step + 1 step
2. 2 steps
Example 2:
Input: n = 3
Output: 3
Explanation: There are three ways to climb to the top.
1. 1 step + 1 step + 1 step
2. 1 step + 2 steps
3. 2 steps + 1 step
Constraints:
- 1 <= nums.length <= 10^5
- -10^9 <= nums[i] <= 10^9
풀이
이 문제는 계단을 걸을 수 있는 모든 경우의 수를 구하는 것을 목표로 하고 있다.
사실 처음 볼 때 어떻게 풀어야할지 감이 안왔는데, 다른 테스트 n=4, n=5를 직접 구해보고 나니 피보나치 수열로 구현하면 되겠다는 생각이 들었다. 문제를 보고 어떻게 풀어야할지 감이 오지 않을 때는, 테스트 코드를 여러개를 만들어 두고 직접 쓰면서 생각해보면 답이 나올 때가 있어서 주로 사용하는 방법이다.
피보나치 수열은 재귀를 이용하면 되는데, 메모이제이션을 하지 않고 구현하면 테스트를 통과하지 못하므로 테스트를 통과하기 위해서는 객체에 값을 저장해나가면서 풀면 된다.
function climbStairs(n: number): number {
type Cache = {[key: number]: number}
const cache: Cache = {
2: 2,
1: 1
}
const fibonacci = (n: number, cache: Cache) => {
if (n in cache) {
return cache[n]
} else {
cache[n] = fibonacci(n-2, cache) + fibonacci(n-1, cache)
return cache[n]
}
}
return fibonacci(n, cache);
};