1. 백준 - 카드 구매하기
카드 개수에 따른 최대가격을 담는 dp 리스트를 만들고, 각 카트의 가격을 저장하는 리스트를 만든다. dp[1] = p[1]이 되고, dp[2] = dp[1] + p[1] 혹은 dp[0] + p[2]가 된다. 이중 반복문을 통해 모든 경우를 확인하며 가장 큰 값을 dp[i]에 넣는다.
2. 백준 동전 - 1
3. 백준 - 이동하기
4. 백준 - 쉬운 계단 수 - 2차원 DP
각 자리수에서 맨 뒤에 올수 있는 숫자의 개수(0~9)
0 1 2 3 4 5 6 7 8 9
자리수(1) 0 1 1 1 1 1 1 1 1 1
자리수(2) 1 1 2 2 2 2 2 2 2 1
자리수(3) 1 3 3 4 4 4 4 4 3 2
위의 규칙을 살펴보자. 자리수가 1일때, 각 숫자들이 맨뒷자리에 올 수 있는 개수는 1씩이다. 왜냐하면 자리수가 1이기 때문에. 자리수가 2일때를 보자.
맨 뒤에 0이 올 수 있는 경우의 수 - 10이 있다.(1개)
맨 뒤에 1이 올 수 있는 경우의 수 - 21이 있다.(1개)
맨 뒤에 2이 올 수 있는 경우의 수 - 12, 32이 있다.(2개)
이렇게 3자리수까지 구해보면 위와같은 표가 나올 수 있는데 규칙을 찾아보면, 해당 위치의 대각선 위 위치의 숫자들의 합인걸 알 수 있다. 당연한 소리다. 3이 맨 뒷자리에 가려면, 앞은 2나 4가 와야하기 때문. 0은 왼쪽대각선은 없으므로 오른쪽 대각선만. 9도 마찬가지로 오른쪽대각선은 없으므로 왼쪽 대각선만. 이렇게 점화식을 세워 코드를 작성해준다.
j = 0 dp[i][j] = dp[i - 1][1]
j = 9 dp[i][j] = dp[i - 1][8]
j = 2 ~ 8 dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]
[출처 - 깨지고 부서져라pacific-ocean.tistory.com/151]
'코딩테스트 준비' 카테고리의 다른 글
itertools의 combinations를 이용한 부분수열 합 문제 (0) | 2021.02.24 |
---|---|
큐 자료구조 문제 (0) | 2021.02.23 |
가장 긴 증가하는 부분 수열 (LIS) (0) | 2021.02.21 |
백준 N과 M (1) - 백트래킹 - dfs (0) | 2021.02.19 |
DP (0) | 2021.02.19 |