일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 벤쿠버집구하기
- 부산입국
- QA엔지니어
- binaray_gap
- 벤쿠버 렌트
- 언마운트
- IntelliJ
- 외래키설정
- 벤쿠버렌트
- 레노보노트북
- codility
- Linux
- 1463번
- BC렌트
- 프로그래머스
- FLEX5
- 캐나다워홀
- Lesson3
- FK 설정
- 자바
- Java
- 리눅스
- 설탕문제
- 백준알고리즘
- database연결
- 파이도 환불
- 데이터의 무결성
- FIDO 환불
- 엔테크서비스
- Lesson2
- Today
- Total
대충이라도 하자
Dynamic Programming (Part1) 본문
<LeetCode 문제들>
- climbing stairs
-coin change
- longest incresing subsequence
- word break
=====================================================================
DP 는 결국 Optimal Substructure를 구하는 것
1. DFS + Memoization
2. Recursion + caching
문제 푸는 순서
1. count the parameters : dimensionally 생각해보기
2. Identify the base case
3. Implementing memoization / tabulation
dp문제는 iterative or recursive 둘 중 하나로 무조건 풀리게 되어 있따.
- iterative = bottom-up -> tabulation
- recursive = top -down -> memoization
4. 이렇게 나오는 과정을 save해야 함
-> 결국 배열, 리스트가 필요
1. Climbing Stairs
<먼저, recursive way>
->
1. 값을 계속 담을 배열 만들기
2. base case에 대한 값
3. 값이 담겨있다고 하면, 계산할 필요 없음
4. 다음 값 구하고 배열에 담기
<iterative way>
훨씬 간단하네....
2. Coin Change
3. Longest Incresing Subsequence
4. Word Break
답은 뭐든 간에 배열 맨 마지막 것..ㅋㅋㅋ 그리고 dp[0]에 ""를 넣어주었기 때문에 -1하지 않아도 됨!!
f[j]=> dp[j]
f[i] => dp[i]로 변경해야 합니다.
*** recurrence relation을 생각해내는 게 중요합니다!!! ( 점화식)