sladuf
200
sladuf
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (83)
    • ๐Ÿ“š Programming (32)
      • Swift (13)
      • JAVA (2)
      • Python (6)
      • SQL (6)
      • Web (5)
    • ๐Ÿ“ฑ iOS (25)
      • Base (7)
      • SwiftUI (9)
      • UIKit (7)
      • ์ธ๊ฐ• & ์ฑ… (2)
    • ๐Ÿ”— Algorithm (20)
      • Python (12)
      • Swift (3)
      • Tip (5)
    • ๐Ÿ—‚ ETC (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Swift
  • ์Šค์œ„ํ”„ํŠธ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๊ธ€์“ฐ๊ธฐ ์„ค์ •
hELLO ยท Designed By ์ •์ƒ์šฐ.
sladuf

200

[Python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)
๐Ÿ”— Algorithm/Tip

[Python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)

2022. 2. 17. 14:43

 

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์€ ์ ํ™”์‹๊ณผ memoization ์ด๋‹ค.

DP๋Š” ์ฃผ๋กœ bottom-up ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, top-down์œผ๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

top-down์€ ์žฌ๊ท€+memoization์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

 

 

๋Œ€ํ‘œ์ ์ธ DP๋ฌธ์ œ๋กœ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์žˆ๋‹ค.

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

 

2748๋ฒˆ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 2

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 0๊ณผ 1๋กœ ์‹œ์ž‘ํ•œ๋‹ค. 0๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 0์ด๊ณ , 1๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 1์ด๋‹ค. ๊ทธ ๋‹ค์Œ 2๋ฒˆ์งธ ๋ถ€ํ„ฐ๋Š” ๋ฐ”๋กœ ์•ž ๋‘ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ์ด ๋œ๋‹ค. ์ด๋ฅผ ์‹์œผ๋กœ ์จ๋ณด๋ฉด Fn = Fn-1 + Fn-2 (n ≥ 2)๊ฐ€

www.acmicpc.net

 

๐Ÿ“ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ์ ํ™”์‹์€ f(n) = f(n-1) + f(n-2) (n>=2)

 

๐Ÿ“Œ Bottom-Up

์ ํ™”์‹์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ œ์ผ ์ž‘์€ ๊ฐ’๋ถ€ํ„ฐ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

์œ„ ํ”ผ๋ณด๋‚˜์น˜ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋กœ๋“ค์–ด, f(10)๊นŒ์ง€ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” f(2)๋ถ€ํ„ฐ ๋ฐ˜๋ณต์„ ์‹œ์ž‘ํ•œ๋‹ค.

์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด,

n = 10
f = [0] * (n+1)
f[0] = 0
f[1] = 1

for i in range(2, n+1):
    f[i] = f[i-1]+f[i-2]

print(f[n])

 

์ ํ™”์‹์˜ ๋ฒ”์œ„์— ์ฃผ์˜ํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

 

๐Ÿ“Œ Top-Down

์žฌ๊ท€์™€ ๋ฉ”๋ชจ์ œ์ด์…˜์„ ์ด์šฉํ•œ๋‹ค. (๋‹จ์ˆœํžˆ ์žฌ๊ท€๋งŒ ์ด์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚  ๊ฐ€๋Šฅ์„ฑ โฌ†๏ธ)

์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๊ตฌํ•˜๊ณ ์žํ•˜๋Š” f(10)์„ ๋„ฃ์–ด, ๋‹ต์ด ๋‚˜์˜ฌ๋•Œ๊ฐ€์ง€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด,

n = 10
memo = [0] * (n+1)
memo[0] = 0
memo[1] = 1

def f(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    if memo[n] == 0:
        memo[n] = f(n-1) + f(n-2)
    return memo[n]

print(f(n))

 

 

 

ํ•˜์ง€๋งŒ, ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ์Šคํƒ์— ๊ฐ’์ด ๊ณ„์† ์Œ“์—ฌ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ ๋งŒํ•˜๋ฉด DP๋Š” bttom-up ํ•˜๋Š” ๊ฑธ๋กœ..!

๐Ÿ’ก ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ทœ์น™์„ ์ฐพ์•„ ์ ํ™”์‹์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ

 

 

๐Ÿ“Œ ๋ฐฑ์ค€ 11726๋ฒˆ

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

 

11726๋ฒˆ: 2×n ํƒ€์ผ๋ง

2×n ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ 1×2, 2×1 ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ 2×5 ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์„ ์ฑ„์šด ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด๋‹ค.

www.acmicpc.net

 

 

์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

f(3)๋ถ€ํ„ฐ ๊ทœ์น™์ด ๋ฐœ๊ฒฌ๋˜๋Š”๋ฐ, f(2)์— ํŒŒ๋ž€์ƒ‰ ํƒ€์ผ ํ•˜๋‚˜๋ฅผ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ• + f(1)์— ํ•‘ํฌ์ƒ‰ ํƒ€์ผ ํ•œ ์Œ์„ ๋ถ™์ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

์ฆ‰, f(n) = f(n-1)์— ํŒŒ๋ž€์ƒ‰ ํƒ€์ผ์„ ํ•˜๋‚˜ ๋ถ™์ด๊ธฐ + f(n-2)์— ํ•‘ํฌ์ƒ‰ ํƒ€์ผ ํ•œ ์Œ์„ ๋ถ™์ด๊ธฐ (n>=2)

 

 

์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ฉด,

f(0) = 1์„ ํ•ด์ค€ ์ด์œ ๋Š”, f(2) = f(1) + f(0) = 2๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

import sys

n = int(sys.stdin.readline())

dp = [0] * (n+1)
dp[0] = 1
dp[1] = 1
for i in range(2, n+1):
    dp[i] += (dp[i-1] + dp[i-2])%10007

print(dp[n])

 

 

 

 

 

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ”— Algorithm > Tip' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] ์ตœ์†Œํž™(MIN heap) / ์ตœ๋Œ€ํž™(MAX heap)  (0) 2022.01.31
[Algorithm] LCA ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2021.03.28
[Algorithm] Dijkstra ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2021.03.11
[Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS  (0) 2020.08.24
    '๐Ÿ”— Algorithm/Tip' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python] ์ตœ์†Œํž™(MIN heap) / ์ตœ๋Œ€ํž™(MAX heap)
    • [Algorithm] LCA ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • [Algorithm] Dijkstra ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • [Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS
    sladuf
    sladuf

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”