[항해99 취업리부트 TIL] 4주차 3일

2024. 6. 15. 20:44·스케쥴/스터디

학습한 내용은 무엇인가요?

동적 프로그래밍(DP) 알고리즘 개요

  • DP는 문제를 작은 하위 문제로 나누어 해결한 후 그 결과를 결합하여 원래 문제를 해결하는 기법이다.
  • 두 가지 특징:
    • 중복되는 하위 문제
    • 최적 부분 구조
  • 구현 방식:
    • 탑다운(메모이제이션)
    • 바텀업(테이블화)

피보나치 수열

  • 피보나치 수열은 DP의 대표적인 예제이다.
  • 점화식: F(n) = F(n-1) + F(n-2)
  • 초기 조건: F(0) = 0, F(1) = 1
탑다운 방식
  • 재귀와 메모이제이션을 이용해 구현.
  • 중복 계산을 피하기 위해 이미 계산된 결과를 저장.
  1. int[] memo = new int[n + 1]; 배열을 -1로 초기화.
  2. fib(n, memo) 함수 호출:
    • if (n <= 1) return n;
    • if (memo[n] != -1) return memo[n];
    • memo[n] = fib(n - 1, memo) + fib(n - 2, memo);
바텀업 방식
  • 반복문을 이용해 작은 문제부터 차례대로 해결.
  1. int[] dp = new int[n + 1]; 배열 초기화.
  2. dp[0] = 0; dp[1] = 1;
  3. 반복문을 통해 dp[i] = dp[i - 1] + dp[i - 2]; 계산.

0/1 배낭 문제

  • 주어진 물건들을 배낭에 넣을지 말지 결정하여 최대 가치를 얻는 문제.
  • DP 테이블을 이용해 해결.
  1. int[][] dp = new int[n + 1][W + 1]; 배열 초기화.
  2. 두 개의 중첩 반복문을 통해 DP 테이블 채움:
    • if (weights[i - 1] <= w) dp[i][w] = Math.max(dp[i - 1][w], dp[i - 1][w - weights[i - 1]] + values[i - 1]);
    • else dp[i][w] = dp[i - 1][w];

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

  • 주어진 수열에서 가장 긴 증가하는 부분 수열의 길이를 찾는 문제.
  • DP를 이용하여 해결.
  1. int[] dp = new int[N]; 배열을 1로 초기화.
  2. 두 개의 중첩 반복문을 통해 LIS 계산:
    • if (A[i] > A[j]) dp[i] = Math.max(dp[i], dp[j] + 1);

이를 통해 얻은 인사이트

동적 프로그래밍의 중요성

  • DP는 복잡한 문제를 효율적으로 해결할 수 있는 강력한 기법으로, 특히 중복되는 계산이 많은 문제에서 유용하다.

탑다운과 바텀업 방식의 차이

  • 탑다운 방식은 재귀와 메모이제이션을 이용하여 간결하게 코드를 작성할 수 있지만, 스택 오버플로우의 위험이 있다.
  • 바텀업 방식은 반복문을 이용하여 스택 오버플로우 문제를 피할 수 있으며, 일반적으로 메모리 사용이 더 효율적이다.

다양한 문제에의 적용

  • 피보나치 수열, 배낭 문제, LIS 문제 등 다양한 문제에 DP를 적용할 수 있으며, 각 문제의 특성에 맞는 적절한 DP 기법을 선택하는 것이 중요하다.

복잡한 문제의 단순화

  • DP를 통해 복잡한 문제를 작은 하위 문제로 나누어 해결함으로써 문제를 단순화할 수 있다.
  • 이 과정에서 문제의 최적 부분 구조와 중복되는 하위 문제를 잘 이해하는 것이 핵심이다.

이 인사이트를 바탕으로, 복잡한 문제를 해결할 때 DP를 적용하여 효율적으로 접근할 수 있습니다.

저작자표시 (새창열림)

'스케쥴 > 스터디' 카테고리의 다른 글

[항해99 취업리부트 WIL] 5주차  (0) 2024.06.24
[항해99 취업리부트 TIL] 4주차 4일  (1) 2024.06.17
[항해99 취업리부트 TIL] 4주차 2일  (1) 2024.06.12
[항해99 취업리부트 TIL] 3주차 5일  (0) 2024.06.10
[항해99 취업리부트 TIL] 3주차 4일  (0) 2024.06.08
'스케쥴/스터디' 카테고리의 다른 글
  • [항해99 취업리부트 WIL] 5주차
  • [항해99 취업리부트 TIL] 4주차 4일
  • [항해99 취업리부트 TIL] 4주차 2일
  • [항해99 취업리부트 TIL] 3주차 5일
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (284)
      • 여러가지 (108)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (2)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 운영체제 (0)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    spring
    완전탐색
    OOP
    프로그래머스
    ecs
    파이썬
    자바
    시험
    Spring WebFlux
    항해99
    java
    백준
    Docker-compose
    WebFlux
    celery
    DP
    RDS
    AWS
    docker
    mybatis
    FastAPI
    Spring Boot
    그리디
    SAA
    EC2
    reactor
    Python
    취업리부트
    Redis
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[항해99 취업리부트 TIL] 4주차 3일
상단으로

티스토리툴바