본문 바로가기
알고리즘

동적 계획법(Dynamic Programming)

by lewns2 2021. 9. 13.

 

동적 계획법(DP)

 

1. 정의

- 특정 범위까지의 값을 구하기 위해서 다른 범위까지의 값을 이용하여 효율적으로 값을 구하는 알고리즘

 

- 이미 과거에 구한 값을 활용하여 불필요한 계산을 하지 않는다.

 

2. DP 언제 쓸까?

1. 최적의 정답을 찾을 때 : (~가능한) 최대값 또는 최소값.

2. 정답의 수를 세야 할 때 : 문제를 해결할 수 있는 경우의 수를 세고 싶을 때.

 

3. 방법론 

- 탑다운(top-down) : 메모이제이션을 사용한 재귀 호출 방식.

- 바텀업(bottom-up) : 반복문(for문)을 사용, 일반적으로 점화식을 한 눈에 나타내기에 가독성이 좋다.

 

이건 한번 검색해서 보시면, 느낌이 오실겁니다!

 

https://blog.naver.com/kks227/220777103650

 

동적 계획법(Dynamic Programming) (수정: 2019-02-07)

안녕하세요. 오늘 소개해 드릴 것은 바로 그 유명한 다이나믹 프로그래밍(Dynamic Programming)입니다. ...

blog.naver.com

 

 

4. 대표 유형

    1. 최적의 정답 : 최대 or 최소 구하기

 

동전 0

 

 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

 

가장 긴 증가하는 부분 수열(LIS)

 

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

 

평범한 배낭 (냅색 문제)

 

12865번: 평범한 배낭

첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)

www.acmicpc.net

 

 

     2. 경우의 수

 

2xn 타일링

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

 

동전 1

 

2293번: 동전 1

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

 

728x90
반응형