MY MEMO
[ALGORITHM STUDY] Dynamic Programming (DP, 동적계획법) 본문
[ALGORITHM STUDY] Dynamic Programming (DP, 동적계획법)
l_j_yeon 2017. 5. 5. 11:58피보나치
9465 스티커 : https://www.acmicpc.net/problem/9465
계단 오르기에는 규칙이 있다.
1. 한 칸을 연속으로 세 번 오를 수 없다.
2. 한 번에 한 칸 두 칸씩 움직일 수 있다.
3. 맨 마지막 계단에 도달해야한다.
그렇다면 규칙이있다.
먼저 한 칸을 올랐을 때
1. 두칸을 움직이고 한칸을 가는 방법
이 있다.
두 칸을 올랐을 때는
1. 한 칸을 오른 후에 두칸을 오르는 방법
2. 두 칸, 두 칸을 오르는 방법이 있다.
코드를 보면 맨 처음이 DP[n][0]이 한칸을 올랐을 때 이고
DP[n][1]이 두칸을 올랐을 때라는 것을 알 수 있다.
참고 : https://lyzqm.blogspot.kr/2017/03/2579.html
11053 가장 긴 증가하는 부분 수열 : https://www.acmicpc.net/problem/11053
+) 참고 : http://wootool.tistory.com/96
2879 코딩은 예쁘게 : https://www.acmicpc.net/problem/2879
코딩은 예쁘게
내가 처음 혼자서 푼 DP문제 이다.. 감격..
DP 고자에게는 너무 힘든 문제였다.
일단 이 문제를 어떻게 DP로 풀지 생각하였다.
부분을 나누어서 계산하는 것인 만큼 DP를 이용하면 된다고 했는데 그걸 머리 짜내서 고민하다가 그냥 DP를 버렸다.
1. 차이가 0일때
2. 부호가 달라질때
두개의 경우의 수가 있을 때 구간을 나누어야한다.
절댓값이 가장 작은 것을 골라서 구간에 있는 모든 숫자에 뺀다.
나의 코드 같은 경우는 차이가 0인 것이 맨 앞에 오면 지워버린다.
중복되는 반복을 조금이라도 줄이고 싶어서 이다.
+) return 1을 해주는 경우와 함수()+1해주는 경우는 무엇이 다를까?
return 1을 해주는 경우는 방법의 수를 나타낼 때 주로 쓰인다. 예를 들어 이길로 가서 목표에 도달하면 return 1 즉 방법이 1개 있다는 뜻이다.
하지만 함수()+1을 해주는 경우는 가는 경로를 모두 더해주는 것이다. 예를 들어 이길로 가서 목표에 도달하지만 가는 경로에 집이 9개 있었다면 이 방법을 쓴다.
'ALGORITHM > ALGORITHM STUDY' 카테고리의 다른 글
[ALGORITHM STUDY] 알고리즘 시간복잡도 계산 방법 (0) | 2017.05.19 |
---|---|
[ALGORITHM STUDY] 다익스트라 알고리즘 경로 출력 (0) | 2017.05.08 |
[ALGORITHM - ALGORITHM STUDY] 분할 정복 (Divide and Conquer) (0) | 2017.04.18 |
[ALGORITHM - ALGORITHM STUDY] 탐욕 알고리즘 (0) | 2017.04.17 |
[DATASTRUCTURE] DFS로 Cycle 확인하기 (0) | 2017.04.10 |