๐Ÿ‘จโ€๐Ÿ’ป
Hamin TIL
  • Today I Learned ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป
  • ํšŒ๊ณ 
  • git
    • git_basics
      • Git 101
      • Git branch
      • Git_ignore
    • Git Book
    • ์šฐ์•„ํ•œํ˜•์ œ๋“ค
    • pull_request
  • db
    • DA
      • ๋ฐ์ดํ„ฐํ‘œ์ค€ํ™”
      • ๋ฐ์ดํ„ฐ_์š”๊ฑด๋ถ„์„
      • ์ „์‚ฌ์•„ํ‚คํ…์ฒ˜_์ดํ•ด
      • ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋ง
    • SQL
      • SQL๊ธฐ๋ณธ๋ฐํ™œ์šฉ
        • SQLํ™œ์šฉ
          • ์ ˆ์ฐจํ˜•SQL
          • ๊ณ„์ธตํ˜•์งˆ์˜์™€์…€ํ”„์กฐ์ธ
          • DCL
          • ๊ทธ๋ฃนํ•จ์ˆ˜
          • ์œˆ๋„์šฐํ•จ์ˆ˜
          • ํ‘œ์ค€์กฐ์ธ
          • ์ง‘ํ•ฉ์—ฐ์‚ฐ์ž
          • ์„œ๋ธŒ์ฟผ๋ฆฌ
        • SQL๊ณ ๊ธ‰ํ™œ์šฉ๋ฐํŠœ๋‹
          • ์˜ตํ‹ฐ๋งˆ์ด์ €์™€์‹คํ–‰๊ณ„ํš
          • ์กฐ์ธ์ˆ˜ํ–‰์›๋ฆฌ
          • ์ธ๋ฑ์Šค๊ธฐ๋ณธ
        • SQL๊ธฐ๋ณธ
          • ํ•จ์ˆ˜
          • ๊ด€๊ณ„ํ˜•๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐœ์š”
          • GROUPBY,HAVING์ ˆ
          • DDL
          • ์กฐ์ธ
          • ORDERBY์ ˆ
          • DML
          • WHERE์ ˆ
          • TCL
      • ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋ง์˜์ดํ•ด
        • ๋ฐ์ดํ„ฐ๋ชจ๋ธ๊ณผ์„ฑ๋Šฅ
          • ์ •๊ทœํ™”์˜ ์„ฑ๋Šฅ
          • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ตฌ์กฐ์™€์„ฑ๋Šฅ
          • ๋ถ„์‚ฐ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์„ฑ๋Šฅ
          • ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ
          • ๋ฐ˜์ •๊ทœํ™”์™€ ์„ฑ๋Šฅ
          • ์„ฑ๋Šฅ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋ง์˜ ๊ฐœ์š”
        • ๋ฐ์ดํ„ฐ๋ชจ๋ธ๋ง์˜์ดํ•ด
          • ์‹๋ณ„์ž
          • ์†์„ฑ
          • ๊ด€๊ณ„
          • ์—”ํ„ฐํ‹ฐ
          • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ์ดํ•ด
    • DB
  • trouble
    • libomp
    • After macOS update, git command
    • system
  • algorithm
    • BOJ
      • ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ
      • 17825-์ฃผ์‚ฌ์œ„์œท๋†€์ด
      • 14888-์—ฐ์‚ฐ์ž๋ผ์›Œ๋„ฃ๊ธฐ
      • 14503-๋กœ๋ด‡์ฒญ์†Œ๊ธฐ
      • 10157
      • 14502-์—ฐ๊ตฌ์†Œ
      • 18428-๊ฐ์‹œํ”ผํ•˜๊ธฐ
      • 14501
      • 18405-๊ฒฝ์Ÿ์ ์ „์—ผ
      • 14499-์ฃผ์‚ฌ์œ„๊ตด๋ฆฌ๊ธฐ
      • 16236-์•„๊ธฐ์ƒ์–ด
      • 15686-์น˜ํ‚จ๋ฐฐ๋‹ฌ
      • 19237-์–ด๋ฅธ์ƒ์–ด
      • 16234-์ธ๊ตฌ์ด๋™
      • 19236-์ฒญ์†Œ๋…„์ƒ์–ด
      • 1339-๋‹จ์–ด์ˆ˜ํ•™
      • ๋ฆฌ๋ชจ์ฝ˜
      • 18353 - ๋ณ‘์‚ฌ๋ฐฐ์น˜ํ•˜๊ธฐ
      • 18352-ํŠน์ •๊ฑฐ๋ฆฌ์˜๋„์‹œ์ฐพ๊ธฐ
      • 12100-2048
      • N-Queen
      • 3190-๋ฑ€
      • 11724
    • programmers
      • ์˜์–ด๋๋ง์ž‡๊ธฐ
      • ๊ธฐ๋‘ฅ๊ณผ ๋ณด
      • H - index
      • ์ •์ˆ˜์‚ผ๊ฐํ˜•
      • 2018 KAKAO BLIND RECRUITMENT - ์••์ถ•
      • ์‚ผ๊ฐ๋‹ฌํŒฝ์ด
      • ๊ฑฐ์Šค๋ฆ„๋ˆ
      • [1์ฐจ] ์…”ํ‹€๋ฒ„์Šค
    • data_structure
      • Queue
      • Graph
      • Stack
      • Hash table
    • implementation
      • dynamic_programming
      • sort
      • Least common multiple
      • dfs
      • dijkstra
      • bfs
      • binary_search
    • aps
      • notes
    • modules
  • python
    • requirements.txt
    • Jupyter notebook
    • 00_๋“ค์–ด๊ฐ€๊ธฐ ์ „์—
    • Python Virtual Environment
    • Python Syntax
  • django
    • Class Based View in Django
    • Model in Django
    • URL Name
    • Form and ModelForm
    • Authentication
    • Tips & Tricks
    • Optimization
    • Request and Response Objects
    • Templates
    • Variable Routing & DTL
    • Django REST API with JSON web token (JWT)
    • Intro to Django
    • Django REST Framework
    • Wrap-up
    • Image Upload
  • javascript
    • Ajax (Asynchronous Javascript And XML)
    • Document Object Model
    • Java Script 101
    • ES (ECMAscript)
  • java
    • Java 101
  • aws
    • beginning_cloud_computing_with_aws
      • 02 AWS ์ฃผ์š” ์„œ๋น„์Šค ์ดํ•ดํ•˜๊ธฐ
      • 01 ์•„๋งˆ์กด ์›น ์„œ๋น„์Šค Cloud ๊ฐœ์š”
  • programming
    • Communication
    • CS_์šฉ์–ด์‚ฌ์ „
  • vue.js
    • 01_Vue.js_Intro
  • data_science
    • 01_๋ฐ์ดํ„ฐ์—์„œ์ธ์‚ฌ์ดํŠธ๋ฐœ๊ฒฌํ•˜๊ธฐ
    • pandas
    • 04_๋ฐ์ดํ„ฐ๋ถ„๋ฅ˜๋ชจ๋ธ
    • 02_ํ…์ŠคํŠธ๋งˆ์ด๋‹์ฒซ๊ฑธ์Œ
    • 05_์ข…ํ•ฉ์˜ˆ์ œ
    • 03_๋ฏธ๋ž˜๋ฅผ์˜ˆ์ธกํ•˜๋Š”๋ฐ์ดํ„ฐ๋ถ„์„
    • Statistics
      • ๋ชจ์ˆ˜์™€ ์ถ”์ •๋Ÿ‰
    • ํ†ต๊ณ„ํ•™๋…ธํŠธ
  • linux
    • Linux Commands
  • ide
    • VScode
    • Pycharm
  • html,css
    • HTML 101
    • CSS 101
  • colab
    • colab_101
  • ์˜์‚ฌ๊ฒฐ์ •๋‚˜๋ฌด๋ฐ๋ชจํ˜•๋น„๊ต
Powered by GitBook
On this page
  • Dynamic programming
  • ๋‹ค์ด๋‚˜๋ฏน ์‚ฌ์šฉ์กฐ๊ฑด
  • Memoization (Top - Down)
  • Bottom - Up
  • LIS (๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด)
  • LCS (์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด)
  • Knapsack Problem
  • ํŽธ์ง‘๊ฑฐ๋ฆฌ
  • etc

Was this helpful?

  1. algorithm
  2. implementation

dynamic_programming

Dynamic programming

์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ•ด๋„ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋งค์šฐ ๋งŽ์ด ํ•„์š”ํ•˜๋ฉด ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์•ฝ๊ฐ„ ๋” ์‚ฌ์šฉํ•˜๋ฉด, ์—ฐ์‚ฐ ์†๋„๋ฅผ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•. ๋™์  ๊ณ„ํš๋ฒ•์ด๋‹ค.

  • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋™์  ํ• ๋‹น์˜ ๋‹ค์ด๋‚˜๋ฏน์€ ๊ฐ™์€ ์˜๋ฏธ์ผ๊นŒ?

    Dynamic: 
        ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์—
    
    ex) ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋™์ ํ• ๋‹น (Dynamic Allocation) ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•.

๋‹ค์ด๋‚˜๋ฏน ์‚ฌ์šฉ์กฐ๊ฑด

  1. ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  2. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํฐ ๋ฌธ์ œ์—์„œ๋„ ๋™์ผํ•˜๋‹ค.

  3. ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋Œ€ํ‘œ ๋ฌธ์ œ: ํ”ผ๋ณด๋‚˜์น˜

    def fibo(n):
      if n == 1 or 2:
        return 1
      return fibo(n - 1) + fibo(n - 2)
    • O(2^N) ์˜ ๊ณ„์‚ฐ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ ธ 100 ๋งŒ ๋˜๋”๋ผ๋„ ์ˆ˜๋ฐฑ์–ต๋…„์ด ๊ฑธ๋ฆฐ๋‹ค.

Memoization (Top - Down)

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•œ ์ข…๋ฅ˜. ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋”˜๊ฐ€์— ๋‹ด์•„๋‘๋Š” ๊ฒƒ์„ ์˜๋ฏธ

ํ•œ ๋ฒˆ ๊ตฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฉ”๋ชจํ•ด๋‘๊ณ  ๊ฐ™์€ ์‹์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ”๋ชจํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ด

์บ์‹ฑ (Caching) ์ด๋ผ๊ณ ๋„ ํ•จ

  • Implementation

    • ํ•œ ๋ฒˆ ๊ตฌํ•œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ. ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ๊ฐ™์€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ด๋ฏธ ๊ตฌํ•œ ์ •๋‹ต์„ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์ ธ์˜ด

      ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ˜ธ์ถœ

      # ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ (memoization) ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
      d = [0] * 100
      
      # ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ (ํƒ‘๋‹ค์šด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
      def fibo(x):
            # ์ข…๋ฃŒ ์กฐ๊ฑด
          if x == 1 or 2:
                  return 1
            # ์ด๋ฏธ ๊ณ„์‚ฐํ•œ ์  ์žˆ๋Š” ๋ฌธ์ œ๋ผ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
            if d[x] != 0:
                  return d[x]
            # ์•„์ง ๊ณ„์‚ฐํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ๋ผ๋ฉด ์ ํ™”์‹์— ๋”ฐ๋ผ์„œ ํ”ผ๋ณด๋‚˜์น˜ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
            d[x] = fibo(x - 1) + fibo(x - 2)
            return d[x]
  • ๋•Œ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•, ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์ „(dict) ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ˆ˜์—ด์ฒ˜๋Ÿผ ์—ฐ์†์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ ์œ ์šฉํ•จ.

Bottom - Up

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ „ํ˜•์ ์ธ ํ˜•ํƒœ

๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ต์„ ๋„์ถœ

# ์•ž์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DB ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
d = [0] * 100

# ์ฒซ ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์™€ ๋‘ ๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 1
d[1] = 1
d[2] = 1
n == 99

# ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„
for i in range(3, n + 1):
    d[i] = d[i - 1] + d[i - 2]

LIS (๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด)

D[i]: a[i] ๋กœ ๋๋‚˜๋Š” ๊ฐ€์žฅ ๊ธด ์ˆ˜์—ด

for i in range(n):
    for j in range(i):
            # ์• ์ดˆ์— i ๋ฒˆ์งธ๊ฐ€ ๊ฐ€์žฅ ํฌ์ง€ ์•Š์œผ๋ฉด ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—
            if a[j] < a[i]:
                D[i] = max(D[j] + 1, D[i])

LCS (์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ๋ฌธ์ž์—ด)

ํ•œ ๋ฌธ์ž์—ด์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋‚˜์”ฉ ํ•ด๋‚˜๊ฐ

  1. String1[i] == String2[j] ๋ผ๋ฉด [i, j] = [i - 1, j - 1] + 1

  2. String1[i] != String2[j] ๋ผ๋ฉด [i, j] = [i - 1, j] ์™€ [i, j - 1] ์ค‘ ํฐ ๊ฒƒ

Knapsack Problem

2์ฐจ์› DP ๋กœ ๋งค ์ˆœ๊ฐ„ ๋“ค์–ด์˜ค๋Š” ๋ฌผ๊ฑด์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ํ–‰์„ ์ฑ„์›Œ๋‚˜๊ฐ€๋ณด์ž

ํŽธ์ง‘๊ฑฐ๋ฆฌ

etc

  • ๋Œ€๋ถ€๋ถ„ DP ํ•ต์‹ฌ์€, ๋งค ๋ฒˆ๋งˆ๋‹ค ์ตœ์„ ์˜๊ฒƒ ์„ ํƒํ•ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ˆ ๋น„๊ต๋Œ€์ƒ ์„ ์ž˜ ๊ฒ€์ฆํ•˜์ž

    • ์ž‘์€ ๊ฒฝ์šฐ์˜ ์–ด๋–ค ํ•ด๊ฐ€ ์ ์šฉ๋˜๋Š”์ง€ ์ž˜ ๋ณด์ž

  • DP ํ…Œ์ด๋ธ”

    • ํ…Œ์ด๋ธ”์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€, ๋ช‡ ์ฐจ์›

    • ํ–‰, ์—ด์€ ์–ด๋–ป๊ฒŒ ์ •ํ• ์ง€

    • ์ด์ „์˜ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์ฐธ๊ณ ํ•ด์„œ ํ˜„์žฌ๊ฐ’์„ ๊ฒฐ์ •ํ•˜๋Š”์ง€

  • ์ฝ”ํ…Œ์—์„œ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋Œ€์ฒด๋กœ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ์ถœ์ œ๋œ๋‹ค.

  • ์ฃผ์–ด์ง„ ๋ฌธ์ œ๊ฐ€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์œ ํ˜•์ธ์ง€ ํŒŒ์•…ํ•˜์ž

    • ๋ฌธ์ œ์—์„œ ์ž‘์€ ๋ฌธ์ œ์˜ ์ •๋‹ต์ด ์ด ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜๋Š” ํฐ ๋ฌธ์ œ์—์„œ๋„ ๋™์ผํ•œ ๊ฒƒ์ธ์ง€ ํŒŒ์•…์ด ์ค‘์š”

    • ๊ทผ๋ฐ ์ด๊ฑด ๋ณดํ…€์—…๋ฐฉ์‹์œผ๋กœ 0, 1, 2 ๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด ๊ทœ์น™์ด ๋ณด์ด๊ณ , ์ค‘๋ณต๋˜๋Š”๊ฑธ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜๊ธฐ ์†์‰ฝ๋‹ค.

  • ์ผ๋‹จ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•˜๊ณ , ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ๋‹ต์ด ํฐ ๋ฌธ์ œ์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋ฉด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ™œ์šฉ

  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ณดํ…€์—… ๋ฐฉ์‹์„ ๊ถŒ์žฅ

    • recursion depth ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค

      • Sys.setrecursionlimit() ๋งค์„œ๋“œ ํ˜ธ์ถœํ•˜์—ฌ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Œ

PreviousimplementationNextsort

Last updated 4 years ago

Was this helpful?

๋ธ”๋กœ๊ทธ