동적 ν”„λ‘œκ·Έλž˜λ°

λ³΅μž‘ν•œ μ΅œμ ν™” 문제λ₯Ό 더 κ°„λ‹¨ν•œ 쀑볡 λΆ€λΆ„ 문제둜 λ‚˜λˆ„μ–΄ ν•΄κ²°ν•˜μ„Έμš”. ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄, 졜μž₯ 곡톡 λΆ€λΆ„ μˆ˜μ—΄, λ°°λ‚­ 문제, ν–‰λ ¬ 연쇄 κ³±μ…ˆκ³Ό 같은 고전적인 문제λ₯Ό 톡해 λ©”λͺ¨μ΄μ œμ΄μ…˜κ³Ό 상ν–₯식 접근법을 λ§ˆμŠ€ν„°ν•˜μ„Έμš”. 동적 ν”„λ‘œκ·Έλž˜λ°μ΄ μ–΄λ–»κ²Œ μ§€μˆ˜ μ‹œκ°„ μ†”λ£¨μ…˜μ„ λ‹€ν•­ μ‹œκ°„ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ λ³€ν™˜ν•˜λŠ”μ§€ λ°°μš°μ„Έμš”.

9 μ•Œκ³ λ¦¬μ¦˜

ν–‰λ ¬ 체인 κ³±μ…ˆ

Advanced

ν–‰λ ¬ 체인의 졜적 κ΄„ν˜Έν™”λ₯Ό μ°Ύμ•„ 슀칼라 κ³±μ…ˆ 횟수λ₯Ό μ΅œμ†Œν™”ν•©λ‹ˆλ‹€. CLRS 15μž₯의 λŒ€ν‘œμ μΈ 동적 ν”„λ‘œκ·Έλž˜λ° λ¬Έμ œμž…λ‹ˆλ‹€.

O(nΒ³)
O(nΒ²)
dynamic-programmingoptimization
Start Learning

ν”Όλ³΄λ‚˜μΉ˜ (동적 ν”„λ‘œκ·Έλž˜λ°)

Beginner

쀑볡 계산을 ν”Όν•˜κΈ° μœ„ν•΄ 동적 ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜μ—¬ ν”Όλ³΄λ‚˜μΉ˜ 수λ₯Ό 효율적으둜 κ³„μ‚°ν•©λ‹ˆλ‹€. μ§€μˆ˜ μ‹œκ°„ μž¬κ·€ μ†”λ£¨μ…˜μ„ μ„ ν˜• μ‹œκ°„ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ λ³€ν™˜ν•˜λŠ” λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ νž˜μ„ λ³΄μ—¬μ€λ‹ˆλ‹€. 동적 ν”„λ‘œκ·Έλž˜λ° κ°œλ…μ— λŒ€ν•œ 고전적인 μ†Œκ°œμž…λ‹ˆλ‹€.

O(n)
O(n)
dynamic-programmingmemoization
Start Learning

졜μž₯ 곡톡 λΆ€λΆ„ μˆ˜μ—΄ (LCS)

Intermediate

두 μ‹œν€€μŠ€μ— λ™μΌν•œ μˆœμ„œλ‘œ μ‘΄μž¬ν•˜λŠ” κ°€μž₯ κΈ΄ λΆ€λΆ„ μˆ˜μ—΄μ„ μ°ΎμŠ΅λ‹ˆλ‹€. 동적 ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜μ—¬ μ†”λ£¨μ…˜ ν…Œμ΄λΈ”μ„ κ΅¬μΆ•ν•©λ‹ˆλ‹€. DNA μ„œμ—΄ μ •λ ¬, 파일 차이 도ꡬ(diff), ν‘œμ ˆ 감지 λ“±μ˜ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μžˆμŠ΅λ‹ˆλ‹€.

O(m Γ— n)
O(m Γ— n)
dynamic-programmingstrings
Start Learning

νŽΈμ§‘ 거리 (λ ˆλ²€μŠˆνƒ€μΈ)

Intermediate

ν•œ λ¬Έμžμ—΄μ„ λ‹€λ₯Έ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜λŠ” 데 ν•„μš”ν•œ μ΅œμ†Œ 단일 문자 νŽΈμ§‘(μ‚½μž…, μ‚­μ œ, λŒ€μ²΄) 횟수λ₯Ό κ³„μ‚°ν•˜λŠ” 동적 ν”„λ‘œκ·Έλž˜λ° μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. λ§žμΆ€λ²• 검사, DNA μ„œμ—΄ μ •λ ¬, μžμ—°μ–΄ 처리의 기본이 λ©λ‹ˆλ‹€.

O(m Γ— n)
O(m Γ— n)
dynamic-programmingstrings
Start Learning

0/1 λ°°λ‚­ 문제

Intermediate

μ£Όμ–΄μ§„ λ¬΄κ²Œμ™€ κ°€μΉ˜λ₯Ό κ°€μ§„ μ•„μ΄ν…œμ„ μ„ νƒν•˜μ—¬ 무게 μ œν•œ λ‚΄μ—μ„œ 총 κ°€μΉ˜λ₯Ό μ΅œλŒ€ν™”ν•˜λŠ” 고전적인 동적 ν”„λ‘œκ·Έλž˜λ° λ¬Έμ œμž…λ‹ˆλ‹€. 각 μ•„μ΄ν…œμ€ ν•œ 번만 선택할 수 μžˆμŠ΅λ‹ˆλ‹€(0/1). μžμ› ν• λ‹Ή, 포트폴리였 μ΅œμ ν™”, ν™”λ¬Ό 적재 λ“±μ˜ μ‘μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€.

O(n Γ— W)
O(n Γ— W)
dynamic-programmingoptimization
Start Learning

졜μž₯ 증가 λΆ€λΆ„ μˆ˜μ—΄

Intermediate

λͺ¨λ“  μš”μ†Œκ°€ μ¦κ°€ν•˜λŠ” μˆœμ„œμΈ κ°€μž₯ κΈ΄ λΆ€λΆ„ μˆ˜μ—΄μ„ μ°ΎμŠ΅λ‹ˆλ‹€. λŒ€ν‘œμ μΈ 동적 ν”„λ‘œκ·Έλž˜λ° λ¬Έμ œμž…λ‹ˆλ‹€.

O(n log n)
O(n)
dynamic-programmingbinary-search
Start Learning

Kadane μ•Œκ³ λ¦¬μ¦˜ (μ΅œλŒ€ λΆ€λΆ„ λ°°μ—΄)

Intermediate

O(n) μ‹œκ°„μ— μ΅œλŒ€ 합을 κ°€μ§„ 연속 λΆ€λΆ„ 배열을 μ°ΎλŠ” μš°μ•„ν•œ 동적 ν”„λ‘œκ·Έλž˜λ° μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 각 λ‹¨κ³„μ—μ„œ ν˜„μž¬ λΆ€λΆ„ 배열을 ν™•μž₯ν• μ§€ μƒˆλ‘œ μ‹œμž‘ν• μ§€λ₯Ό κ²°μ •ν•˜μ—¬ νƒμš•μ  원리와 DPλ₯Ό κ²°ν•©ν•©λ‹ˆλ‹€. 주식 수읡 μ΅œμ ν™”, μ‹ ν˜Έ 처리, DP μ΅œμ ν™” 기법 이해에 ν•„μˆ˜μ μž…λ‹ˆλ‹€.

O(n)
O(1)
dynamic-programminggreedy
Start Learning

동전 κ΅ν™˜ 문제

Intermediate

λͺ©ν‘œ κΈˆμ•‘μ„ λ§Œλ“œλŠ” 데 ν•„μš”ν•œ μ΅œμ†Œ 동전 개수λ₯Ό μ°ΎλŠ” 고전적인 DP λ¬Έμ œμž…λ‹ˆλ‹€. 더 μž‘μ€ κΈˆμ•‘μœΌλ‘œλΆ€ν„° μ†”λ£¨μ…˜μ„ κ΅¬μΆ•ν•˜μ—¬ 졜적 λΆ€λΆ„ ꡬ쑰λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. 화폐 μ‹œμŠ€ν…œ, μžλ™ 판맀기, μžμ› ν• λ‹Ήμ˜ μ‹€μš©μ  μ‘μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ³€ν˜•μœΌλ‘œλŠ” κ±°μŠ€λ¦„λˆμ„ λ§Œλ“œλŠ” λͺ¨λ“  κ°€λŠ₯ν•œ λ°©λ²•μ˜ 수λ₯Ό μ„ΈλŠ” 것이 μžˆμŠ΅λ‹ˆλ‹€.

O(amount Γ— coins)
O(amount)
dynamic-programmingoptimization
Start Learning

회문 λΆ„ν•  (μ΅œμ†Œ μ»·)

Advanced

2D 동적 ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ„ 회문으둜 λΆ„ν• ν•˜λŠ” 데 ν•„μš”ν•œ μ΅œμ†Œ 컷을 μ°ΎμŠ΅λ‹ˆλ‹€. λ¨Όμ € O(nΒ²)둜 회문 ν…Œμ΄λΈ”μ„ κ΅¬μΆ•ν•œ λ‹€μŒ μ΅œμ†Œ 컷을 κ³„μ‚°ν•©λ‹ˆλ‹€. ν…μŠ€νŠΈ 처리, λ¬Έμžμ—΄ μ΅œμ ν™”, μ—¬λŸ¬ 단계가 μžˆλŠ” λ³΅μž‘ν•œ DP μ‹œμ—°μ˜ μ‘μš©μ΄ μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμžμ—΄ μ‘°μž‘ λ¬Έμ œμ—μ„œ 졜적 λΆ€λΆ„ ꡬ쑰λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.

O(nΒ²)
O(nΒ²)
dynamic-programmingstrings
Start Learning

πŸ’‘ ν•™μŠ΅ 팁

기초λ₯Ό λ‹€μ§€κΈ° μœ„ν•΄ μ΄ˆκΈ‰ μ•Œκ³ λ¦¬μ¦˜λΆ€ν„° μ‹œμž‘ν•œ λ‹€μŒ, 쀑급 및 κ³ κΈ‰ 주제둜 μ§„ν–‰ν•˜μ„Έμš”. 각 μ•Œκ³ λ¦¬μ¦˜μ—λŠ” μΈν„°λž™ν‹°λΈŒ μ‹œκ°ν™”, λ³΅μž‘λ„ 뢄석, 그리고 μ—¬λŸ¬ μ–Έμ–΄μ˜ μ½”λ“œ μ˜ˆμ œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.