😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[v.동적 κ³„νšλ²• 1-μ‹ λ‚˜λŠ” ν•¨μˆ˜ μ‹€ν–‰-9184]BAEKJOON_Python λ³Έλ¬Έ

πŸ¦₯ μ½”ν…Œ/BAEKJOON

[v.동적 κ³„νšλ²• 1-μ‹ λ‚˜λŠ” ν•¨μˆ˜ μ‹€ν–‰-9184]BAEKJOON_Python

μ§•μ§•μ•ŒνŒŒμΉ΄ 2022. 1. 27. 15:17
728x90
λ°˜μ‘ν˜•

220127 μž‘μ„±

<λ³Έ λΈ”λ‘œκ·ΈλŠ” BAEKJOON 을 μ°Έκ³ ν•΄μ„œ μ €λ§Œμ˜ 풀이λ₯Ό μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€>

 

 

 

9184


μž…λ ₯으둜 주어진 각각의 a, b, c에 λŒ€ν•΄μ„œ, w(a, b, c)λ₯Ό 좜λ ₯


λ‹€μŒκ³Ό 같은 μž¬κ·€ν•¨μˆ˜ w(a, b, c)κ°€ μžˆλ‹€.

if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns:
    1

if a > 20 or b > 20 or c > 20, then w(a, b, c) returns:
    w(20, 20, 20)

if a < b and b < c, then w(a, b, c) returns:
    w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)

otherwise it returns:
    w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)

 

 

 

 

 

λ‚΄ 풀이

import sys
input = sys.stdin.readline

def w(a, b, c):
    if a <= 0 or b <= 0 or c <= 0:
        return 1
    elif a > 20 or b > 20 or c > 20:
        return w(20, 20, 20)

    if dp[a][b][c] :
        return dp[a][b][c]

    if a<b<c :
        dp[a][b][c] = w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c)
    else:
        dp[a][b][c] = w(a-1,b,c) + w(a-1,b-1,c) + w(a-1,b,c-1) - w(a-1,b-1,c-1)

    return dp[a][b][c]



dp = [[[0 for _ in range(21)] for _ in range (21)] for _ in range (21)]
while True:
    a,b,c = map(int, input().split())
    if a==-1 and b==-1 and c==-1:
        break
    print("w({}, {}, {}) = {}".format(a,b,c,w(a,b,c)))

 

 

 

 

 

 

2 2 2
w(2, 2, 2) = 4
10 4 6
w(10, 4, 6) = 523

 

 

 

 

 

μ°Έκ³ ν–ˆμˆ©λ‹ˆλ‹Ή,,

μ™œ λ‚΄κΊΌλŠ” νƒ€μž„μ—λŸ¬ λœ¨μ§•..?

https://seraup.dev/8

 

λ°±μ€€ 9184번 μ‹ λ‚˜λŠ” ν•¨μˆ˜ μ‹€ν–‰ (Python)

λ¬Έμ œμ— μ ν™”μ‹κΉŒμ§€ μ“°μ—¬μžˆμ–΄μ„œ λ‹Ήν™©μŠ€λŸ¬μ› λ‹€.. λ„ˆλ¬΄λ‚˜λ„ λ‹Ήμ—°ν•˜κ²Œ λ¬Έμ œμ— μ“°μ—¬μ ΈμžˆλŠ”λŒ€λ‘œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ μ•ˆλœλ‹€! μž¬κ·€ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•  λ•Œ 이것을 λ©”λͺ¨μ΄μ œμ΄μ…˜ ν•˜λŠ” 방법을 λ¬»λŠ” λ¬Έμ œμ΄λ‹€

seraup.dev

 

 

 

728x90
λ°˜μ‘ν˜•
Comments