[18일 차] 알고리즘 (동적 계획법)

2025. 2. 19. 08:52·LG 유플러스 유레카/알고리즘

25/02/19 (수)

오잉 뭐했다고 수요일일까요

어제 스파링 반으로 접히고 몸 성한곳 없이 일어났습니다.

그래도 엄청 상쾌하네요

오늘도 열심히 달려보겠습니다!


 

1. 동적 계획법

1.1) 동적 계획법

package basic.Ch21_Memoization;

public class fibonacci {
    public static void main(String[] args) {
        //#1 재귀 호출
        System.out.println(fibo_rc(20)); //오래 걸림

        //#2 메모이제이션
        System.out.println(fibo_rc_memoi(50));

        //#3 동적 계획법 (점화식 + 메모이제이션)
        System.out.println( fibo_dp(50) );
    }

    public static long fibo_rc(int n){
        if(n == 1 || n == 2) return 1;
        return fibo_rc(n-1) + fibo_rc(n-2);
    }

    static long[] memoi_rc = new long[51];
    public static long fibo_rc_memoi(int n) {
        if(n == 1 || n == 2) return 1;
        if(memoi_rc[n] > 0) return memoi_rc[n];
        else return memoi_rc[n] = fibo_rc_memoi(n-1) + fibo_rc_memoi(n-2);
    }

    static long[] memoi_dp = new long[51];
    public static long fibo_dp(int n) {
        if(n == 1 || n == 2) return 1;

        memoi_dp[1] = 1;
        memoi_dp[1] = 1;

        for (int i = 3; i <= n ; i++) {
            memoi_dp[i] = memoi_dp[i-1] + memoi_dp[i-2];
        }

        return memoi_dp[n];
    }
}
  • 큰 문제를 작은 문제로 나누었을 때 동일한 작은 문제가 반복해서 등장해야 함

 

1.2) 점화식 세우기와 동적 계획법

  1. 문제를 해결하는 해가 이미 있다고 가정 (F0 = 0)
  2. 종료 조건 설정 (F1 = 1)
  3. 1, 2를 활용하여 점화식 세우기 (F2 = F(n+1) + Fn)

재귀 활용 점화식 구현

이 방식은 함수를 재귀하므로 스택 메모리에 함수들이 쌍혀 런타임 오류 발생 가능성

그러므로 문제가 생길 것 같을 때 취하는 다음과 같은 방법이 있음

  • 재귀 호출 자체를 쓰지 않는 법 -> 반복문
  • 재귀 호출의 횟수를 줄이는 법 -> 메모제이션

 

1.3) 재귀 호출의 횟수를 줄여주는 메모이제이션

 

1.4) 최장 증가 부분 수열

 

1.5) 최장 공통 부분 수열

 

 

2.  실습

2.1) 백준

https://www.acmicpc.net/problem/1915

https://www.acmicpc.net/problem/1149

 

2.2) 아파트 문제

 

2.3) 막대 문제

 

2.4) G4_1915_가장 큰 정사각형

 

 

3.  마무리

3.1) WorkShop

  • 수를 더 크게해서 메모이제이션과 동적배열할당의 성능 비교

 

3.2) 더 공부할 것

 

'LG 유플러스 유레카 > 알고리즘' 카테고리의 다른 글

[19일 차] 알고리즘 (문제 풀기)  (0) 2025.02.20
[17일 차] 알고리즘 (시뮬레이션)  (0) 2025.02.18
[16일 차] 알고리즘 (백트래킹)  (0) 2025.02.17
'LG 유플러스 유레카/알고리즘' 카테고리의 다른 글
  • [20일 차] 알고리즘 (문제 풀기2)
  • [19일 차] 알고리즘 (문제 풀기)
  • [17일 차] 알고리즘 (시뮬레이션)
  • [16일 차] 알고리즘 (백트래킹)
문태신
문태신
꾸준함은 모든 것을 이긴다.
  • 문태신
    별 될 시간
    문태신

  • 전체
    오늘
    어제
    • 전체 글 (118)
      • LG 유플러스 유레카 (105)
        • 강의 정리 (1)
        • 소프트웨어 엔지니어링 (8)
        • 알고리즘 (13)
        • 데이터베이스 활용 (5)
        • 미니 프로젝트 1 (3)
        • 데이터베이스 심화 (5)
        • 프론트엔드 이해 (3)
        • 깃허브 특강 (2)
        • 취업 특강 (2)
        • 스프링 프레임워크 (17)
        • REST API (10)
        • 미니 프로젝트 2 (7)
        • 프로젝트 기획 분석 설계 (5)
        • 애자일 방법론 (5)
        • 종합 프로젝트 (15)
        • 클라우드 특강 (3)
        • 최종 융합 프로젝트 (0)
        • 회고 (1)
      • 알고리즘 공부 (5)
      • 자바 공부 (3)
      • 자격증 (2)
      • 디자인 (2)
      • 감상문 (1)
        • 책 (0)
        • 영화 (1)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
문태신
[18일 차] 알고리즘 (동적 계획법)
상단으로

티스토리툴바