MY MEMO

[ALGORITHM STUDY] Dynamic Programming (DP, 동적계획법) 본문

ALGORITHM/ALGORITHM STUDY

[ALGORITHM STUDY] Dynamic Programming (DP, 동적계획법)

l_j_yeon 2017. 5. 5. 11:58

피보나치



9465 스티커 : https://www.acmicpc.net/problem/9465



2579 계단 오르기 : https://www.acmicpc.net/problem/2579


계단 오르기에는 규칙이 있다.


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



11722 가장 긴 감소하는 부분 수열 ; https://www.acmicpc.net/problem/11722



+) 참고 : 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개 있었다면 이 방법을 쓴다.

Comments