Algorithm/DP

[λ°±μ€€] 9095 : 1, 2, 3 λ”ν•˜κΈ° (파이썬)

_은선_ 2024. 8. 23. 04:33
728x90
SMALL

DP 문제

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


πŸ’‘ ν’€μ΄μ½”λ“œ (성곡 1)

import sys 
t = int(sys.stdin.readline())

def dynamic(n):
    dp = [0 for _ in range(n + 1)] 

    dp[0] = 1
    dp[1] = 1 
    dp[2] = 2
    dp[3] = 4

    for i in range(4, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
    print(dp[n])


for _ in range(t):
    n = int(sys.stdin.readline())
    if n == 0:
        print(1)
    elif n == 1:
        print(1)
    elif n == 2:
        print(2)
    elif n == 3:
        print(4)
    else:
        dynamic(n)

 

μ ‘κ·Ό 방식

4λ₯Ό 1, 2, 3으둜 ν‘œν˜„ν•˜λŠ” 방법은 7가지이닀.

 

5λ₯Ό ν‘œν˜„ν•˜λŠ” 방법은 4μ—μ„œ 1을 λ”ν•˜λŠ” 방법(7가지) + 3μ—μ„œ 2λ₯Ό λ”ν•˜λŠ” 방법(4가지) + 2μ—μ„œ 3을 λ”ν•˜λŠ” 방법(2가지)이 μžˆλ‹€.

= 총 13가지(7 + 4 + 2)

 

6λ₯Ό ν‘œν˜„ν•˜λŠ” 방법은 5μ—μ„œ 1을 λ”ν•˜λŠ” 방법(13가지) + 4μ—μ„œ 2λ₯Ό λ”ν•˜λŠ” 방법(7가지) + 3μ—μ„œ 3을 λ”ν•˜λŠ” 방법(4가지)이 μžˆλ‹€.

= 총 24가지(13 + 7 + 4)

 

점화식

N을 ν‘œν˜„ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]

= dp[i-1]μ—μ„œ 1을 λ”ν•˜λŠ” 방법 + dp[i-2]μ—μ„œ 2을 λ”ν•˜λŠ” 방법 + dp[i-3]μ—μ„œ 3을 λ”ν•˜λŠ” 방법 

dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]

 

동전 λ¬Έμ œμ™€ λ‹€λ₯Έμ 

  • 동전 λ¬Έμ œλŠ” 주어진 λ™μ „μ˜ κΈˆμ•‘μ„ ν™œμš©ν•˜μ—¬, κ·Έ κΈˆμ•‘μ˜ 합이 k원이 λ˜λ„λ‘ λ§Œλ“œλŠ” μ‘°ν•© λ¬Έμ œμ΄λ‹€.
    • λ™μ „μ˜ ꡬ성이 같은데, μˆœμ„œκ°€ λ‹€λ₯Έ 것은 같은 경우이기 λ•Œλ¬Έμ΄λ‹€.
  • 이 λ¬Έμ œλŠ” 1, 2, 3을 ν™œμš©ν•˜μ—¬, κ·Έ 합이 kκ°€ λ˜λ„λ‘ λ§Œλ“œλŠ” μˆœμ—΄ λ¬Έμ œμ΄λ‹€.
    • μ•„λž˜ 두가지 κ²½μš°λŠ” 각각 λ‹€λ₯Έ κ²½μš°μ΄λ‹€.
    • 1+2+1
    • 2+1+1

πŸ’‘ ν’€μ΄μ½”λ“œ (성곡 2)

import sys 
t = int(sys.stdin.readline())

def sol(n):
    dp = [0 for _ in range(n + 1)] 

    dp[0] = 1

    for i in range(1, n + 1):
        for j in range(1, 4):
            if i - j >= 0:
                dp[i] += dp[i - j]
    print(dp[n])


for _ in range(t):
    n = int(sys.stdin.readline())
    sol(n)

μ°Έκ³ λ¬Έν—Œ

https://ggasoon2.tistory.com/39

 

λ°±μ€€ 9095번: 1, 2, 3 λ”ν•˜κΈ° (싀버3) python

λ°±μ€€ 9095번의 1, 2, 3 λ”ν•˜κΈ° λ¬Έμ œμž…λ‹ˆλ‹€ μž…μΆœλ ₯은 μ΄λŸ¬ν•©λ‹ˆλ‹€ μš°μ„  4λ₯Ό 1κ³Ό 2와 3으둜 ν‘œν˜„ν•˜λŠ” 방법은 7κ°€μ§€μž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ 5λ₯Ό ν‘œν˜„ν•˜λŠ” λ°©λ²•μœΌλ‘œλŠ” 4μ—μ„œ 1을 λ”ν•˜λŠ”λ°©λ²• (7가지) 3μ—μ„œ 2λ₯Ό λ”ν•˜

ggasoon2.tistory.com

 

728x90
LIST