안녕하세요! 테크지니어22입니다.
오늘은 다이나믹 프로그래밍에 대해서 알아보도록 하겠습니다.
다이나믹 프로그래밍(DP)이란?
- 여러 하위 문제들로 풀고 그 결과를 쌓아올려 주어진 문제를 해결하는 알고리즘
- 일반적으로 시간복잡도는 O(n^2) or O(n x m)형태로 나타남.
언제 자주 사용되는가?
- 최적화문제(최대,최소) -> n이 커서 백트래킹이나, 완전탐색 등으로 구할 수 없는 경우 유용
- 중복되는 부분 문제
어떻게 사용하는가?
- 전체 문제를 하위 문제로 쪼개고 이를 이용하여 전체 문제로 해결가능한 지 파악하기
- 테이블 정의하기
- 1차원으로 최대한 정의를 해보기
(관점을 달리하기 혹은 비틀어보기) - 어렵거나 추가 정보가 요구되면 2차원 정의 해보기
- 1차원으로 최대한 정의를 해보기
- 점화식 찾기
- 초기값 설정하기
- DP 배열 채우기
- 탑다운 방식->재귀 사용
- 바텀업 ->반복문
꿀팁
- 다른 알고리즘으로 도저히 안되고, 시간복잡도 해결도 어렵다면 하위문제로 나눠보기
- 하위문제가 보통 선택지로 나눌 수 있음. 이 선택지는 한정되어 있음. 보통 2~3개 선택지
- 테이블 정의는 본인에게 유리하게 정의할 수 있음 -> 유연함이 필요.
- 공통적으로 dp[i]를 i일까지 최대수익이라는 정의보다는 i일 원소를 포함하는 i일까지 최대수익처럼 기준을 더 상세히 정의하는게 더 유리
참고문제
- https://techgineer22.tistory.com/11
[백준/C++] 알고리즘 1003번 - 피보나치 함수
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 1003번 - 피보나치 함수 를 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는
techgineer22.tistory.com
- https://techgineer22.tistory.com/12
[백준/C++] 알고리즘 1932번 - 정수 삼각형
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 1932번 - 정수 삼각형 울 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)
techgineer22.tistory.com
- https://techgineer22.tistory.com/13
[백준/C++] 알고리즘 11727번 - 2×n 타일링 2
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 11727번 - 2×n 타일링 2 를 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로
techgineer22.tistory.com
- https://techgineer22.tistory.com/14
[백준/C++] 알고리즘 2193번 - 이친수
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 2193번 - 이친수를 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이
techgineer22.tistory.com
- https://techgineer22.tistory.com/16
[백준/C++] 알고리즘 1912번 - 연속합
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 1912번 - 연속합을 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째
techgineer22.tistory.com
- https://techgineer22.tistory.com/17
[백준/C++] 알고리즘 11055번 - 가장 큰 증가하는 부분 수열
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 11055번 - 가장 큰 증가하는 부분 수열을 풀어보도록 하겠습니다. [문제 접근] 제한시간은 1초이고 n은 1000이하입니다. 완전탐색은 합까지
techgineer22.tistory.com
- https://techgineer22.tistory.com/18
[백준/C++] 알고리즘 11053번 - 가장 긴 증가하는 부분 수열
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 11053번 - 가장 긴 증가하는 부분 수열 을 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A
techgineer22.tistory.com
- https://techgineer22.tistory.com/20
[백준/C++] 알고리즘 9146번 - 파도반 수열
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 9146번 - 파도반 수열을 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양
techgineer22.tistory.com
- https://techgineer22.tistory.com/21
[백준/C++] 알고리즘 10844번 - 쉬운 계단 수
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘 10844번 - 쉬운 계단 수 를 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나
techgineer22.tistory.com
- https://techgineer22.tistory.com/22
[백준/C++] 알고리즘 14501번 - 퇴사1
안녕하세요! 테크지니어22입니다. 오늘은 백준 알고리즘14501번 - 퇴사 를 풀어보도록 하겠습니다. https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한
techgineer22.tistory.com
'알고리즘 > 개념' 카테고리의 다른 글
[C++] 이분 탐색 (1) | 2024.07.23 |
---|