Guidelines

λ©”λͺ¨ν™”λ‘œ μž¬κ·€ ν•¨μˆ˜μ˜ νš¨μœ¨μ„± 높이기

μž¬κ·€ ν•¨μˆ˜λŠ” 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λ‘œ, 같은 계산을 λ°˜λ³΅ν•˜κ²Œ λ˜μ–΄ μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ©”λͺ¨ν™”(Memoization) 기법이 μ‚¬μš©λ©λ‹ˆλ‹€.


λ©”λͺ¨ν™”λž€?

λ©”λͺ¨ν™”λŠ” ν•¨μˆ˜μ˜ λ°˜ν™˜ 값을 μ €μž₯ν•΄ λ‘μ—ˆλ‹€κ°€, 같은 μž…λ ₯에 λŒ€ν•΄ ν•¨μˆ˜λ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•  λ•Œ μ €μž₯된 값을 λ°˜ν™˜ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.

λ©”λͺ¨ν™”λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ λ°˜ν™˜ 값을 μ €μž₯ν•΄ 두어 쀑볡 계산을 λ°©μ§€ν•˜κ³ , ν•¨μˆ˜μ˜ μ‹€ν–‰ 속도λ₯Ό 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

λ©”λͺ¨ν™”λ₯Ό μ‚¬μš©ν•œ ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄ μ˜ˆμ‹œ
def fibonacci(n): # λ©”λͺ¨μ΄μ œμ΄μ…˜μ— μ‚¬μš©ν•  빈 λ”•μ…”λ„ˆλ¦¬ 생성 memo = {} def helper(x): # 이미 κ³„μ‚°λœ 값이 있으면 μ €μž₯된 값을 λ°˜ν™˜ if x in memo: return memo[x] # μ’…λ£Œ 쑰건: 0 λ˜λŠ” 1일 λ•Œ x λ°˜ν™˜ if x <= 1: return x # 계산 κ²°κ³Όλ₯Ό λ©”λͺ¨μ΄μ œμ΄μ…˜ λ”•μ…”λ„ˆλ¦¬μ— μ €μž₯ memo[x] = helper(x - 1) + helper(x - 2) return memo[x] # μž¬κ·€ ν•¨μˆ˜ 호좜 return helper(n) # 10번째 ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄ κ°’ 좜λ ₯ print(fibonacci(10)) # 55

μœ„ μ½”λ“œμ—μ„œ memo λ”•μ…”λ„ˆλ¦¬λ₯Ό μ‚¬μš©ν•΄ 이전에 κ³„μ‚°ν•œ 값을 μ €μž₯ν•˜κ³ , 이미 κ³„μ‚°ν•œ 값이라면 μ €μž₯된 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

λ”•μ…”λ„ˆλ¦¬μ— λ‹΄κΈ°λŠ” 값은 μ•„λž˜μ™€ 같은 n에 λŒ€ν•œ ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ˜ κ²°κ³Όμž…λ‹ˆλ‹€.

memo λ”•μ…”λ„ˆλ¦¬
{ 2: 1, 3: 2, 4: 3, 5: 5, 6: 8, 7: 13, 8: 21, 9: 34, 10: 55 }

λ©”λͺ¨ν™”λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜μ˜ μ‹€ν–‰ 속도λ₯Ό 높일 수 있으며, 쀑볡 계산을 방지해 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 계산 κ²°κ³Όλ₯Ό μ €μž₯ν•΄ 두기 μœ„ν•œ 좔가적인 λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•˜λ―€λ‘œ, λ©”λͺ¨ν™”λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Mission
0 / 1

λ©”λͺ¨ν™”(memoization)의 주된 λͺ©μ μ€ λ¬΄μ—‡μΈκ°€μš”?

μž¬κ·€ ν•¨μˆ˜μ˜ μ’…λ£Œ 쑰건을 μ„€μ •ν•˜κΈ° μœ„ν•΄

μž¬κ·€ ν•¨μˆ˜μ˜ 호좜 횟수λ₯Ό 쀄이기 μœ„ν•΄

λ™μΌν•œ κ³„μ‚°μ˜ λ°˜λ³΅μ„ ν”Όν•˜κΈ° μœ„ν•΄

μž¬κ·€ ν•¨μˆ˜λ₯Ό λΉ„μž¬κ·€ ν•¨μˆ˜λ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result