ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다이나믹 프로그래밍
    자료구조와 알고리즘/알고리즘 2023. 4. 13. 22:33

    - 큰 문제를 작은 문제로 나누어 푸는 알고리즘이다.

    - 큰 문제를 작은 문제로 쪼개는 알고리즘은 다이나믹 프로그래밍과 분할정복이 있다.

     두 알고리즘의 차이는 문제를 작은 문제로 만들었을 때, 분할정복과 다르게 dp는 중복이 가능하다는 점이다.

    (따라서 중복을 잘 다뤄야한다.)

     

     

    - 문제가 두 가지 속성을 만족해야 다이나믹 프로그래밍으로 문제를 풀 수 있다.

       1. overlapping Subproblem (겹치는 작은 문제)  

       2. optimal substructure (최적부분구조)

     

    - 1번 속성에 의해 문제를 큰 문제와 작은 문제로 쪼갤 수 있어야하고, 큰 문제와 작은 문제는 같은 방식으로 풀 수 있어야한다.

    - 2번 속성에 의해 문제의 정답을 작은 문제의 정답에서 구할 수 있다. -> 최적부분구조를 만족한다면, 문제의 크기와 관계없이 어떤 한 문제의 정답은 일정하다.

     

    ->다이나믹 프로그래밍에서 각 문제는 한번만 풀어야한다.

    -> 최적부분구조를 만족하므로, 같은 문제는 구할때마다 정답이 같다. --> 더 큰 값을 구하기 위해 쓸 수 있다. 이러한 값을 

    따로 저장해두는것을 memoization이라고 한다. (값을 저장하는 것과 꺼내 쓰는 것 구현해두면 좋다)

     

    다이나믹 구현 방식에는 두 가지 방법이 있다.

    1. top-down ->보통 재귀 

    2. bottom-up ->보통 for문 

     

    문제 풀이 전략 

    >문제에서 구하려는 답을 문장으로 나타내기

    >문장에 나와있는 변수의 개수만큼 메모하는 배열 만들기

    >점화식을 잘...만들기 

     

     

    문제 

     

    - 1로만들기 

    - 2*x타일링

    - 2*x타일링 2

    - 123더하기

    - 카드구매하기

    - 카드구매하기 2

    - 123더하기 5

    - 쉬운 계단 수 

    - 이친수

    '자료구조와 알고리즘 > 알고리즘' 카테고리의 다른 글

    자알인 - 스택 & 큐  (0) 2024.01.30
    자알인 (1) 코딩테스트 팁  (0) 2024.01.03
    여러가지 수학  (0) 2023.04.11
    스택과 문제들 풀면서 얻은..  (0) 2023.04.05
    프코전-자바편 1~2장  (0) 2023.03.30
Designed by Tistory.