✍️ μ½”ν…Œ μ€€λΉ„/Dynamic Programming

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

2021. 1. 12. 12:43
λͺ©μ°¨
  1. μž…λ ₯
  2. 좜λ ₯
  3. ν•΄κ²° 방법
  4. ν•΄κ²° κ³Όμ •

www.acmicpc.net/problem/9184

 

9184번: μ‹ λ‚˜λŠ” ν•¨μˆ˜ μ‹€ν–‰

μž…λ ₯은 μ„Έ μ •μˆ˜ a, b, c둜 이루어져 있으며, ν•œ 쀄에 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μž…λ ₯의 λ§ˆμ§€λ§‰μ€ -1 -1 -1둜 λ‚˜νƒ€λ‚΄λ©°, μ„Έ μ •μˆ˜κ°€ λͺ¨λ‘ -1인 κ²½μš°λŠ” μž…λ ₯의 λ§ˆμ§€λ§‰μ„ μ œμ™Έν•˜λ©΄ μ—†λ‹€.

www.acmicpc.net

 

 

 

μž…λ ₯

μž…λ ₯은 μ„Έ μ •μˆ˜ a, b, c둜 이루어져 있으며, ν•œ 쀄에 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μž…λ ₯의 λ§ˆμ§€λ§‰μ€ -1 -1 -1둜 λ‚˜νƒ€λ‚΄λ©°, μ„Έ μ •μˆ˜κ°€ λͺ¨λ‘ -1인 κ²½μš°λŠ” μž…λ ₯의 λ§ˆμ§€λ§‰μ„ μ œμ™Έν•˜λ©΄ μ—†λ‹€.

좜λ ₯

μž…λ ₯으둜 μ£Όμ–΄μ§„ 각각의 a, b, c에 λŒ€ν•΄μ„œ, w(a, b, c)λ₯Ό 좜λ ₯ν•œλ‹€.


ν•΄κ²° 방법

dpλ₯Ό ν™œμš©ν•œλ‹€.

 

 

ν•΄κ²° κ³Όμ •

[0][0][0] ~ [20][20][20]의 3차원 배열을 μƒμ„±ν•˜κ³  각 μ‘°κ±΄λ³„λ‘œ λ‚˜λˆˆλ‹€. 

νŠΉμ • λ²”μœ„ 이내에 λ“€μ–΄μ˜€λ©΄ dpλ₯Ό κ³„μ‚°ν•œλ‹€.

νŠΉμ • μœ„μΉ˜μ˜ dp의 값이 0이 μ•„λ‹Œ 경우 이미 κ³„μ‚°λ˜μ–΄ μžˆλŠ” dpμ΄λ―€λ‘œ λ³„λ„μ˜ 계산 κ³Όμ • 없이 λ°”λ‘œ 좜λ ₯ν•œλ‹€.

 

μ΅œμ’… μ½”λ“œλŠ”

 

def w(dp, 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(dp, 20, 20, 20)
    
    if dp[a][b][c] != 0:
        return dp[a][b][c]
        
    if a < b and b < c:
        dp[a][b][c] = w(dp, a, b, c-1) + w(dp, a, b-1, c-1) - w(dp, a, b-1, c)
    else:
        dp[a][b][c] = w(dp, a-1, b, c) + w(dp, a-1, b-1, c) + w(dp, a-1, b, c-1) - w(dp, a-1, b-1, c-1)
    
    return dp[a][b][c]
    
def main():
    a, b, c = map(int, input().split())
    dp = [[[0 for _ in range(21)] for _ in range(21)] for _ in range(21)]
    
    while 1:
        if a == -1 and b == -1 and c == -1:
            break
        print("w(%d, %d, %d) = %d" %(a, b, c, w(dp, a, b, c)))
        a, b, c = map(int, input().split())
        
if __name__ == "__main__":
    main()
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'✍️ μ½”ν…Œ μ€€λΉ„ > Dynamic Programming' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[동적 κ³„νšλ²• 1] [C++] 1932번. μ •μˆ˜ μ‚Όκ°ν˜•  (0) 2021.01.13
[동적 κ³„νšλ²• 1] [C++] 1149번. RGB 거리  (0) 2021.01.13
[동적 κ³„νšλ²• 1] [C++] 9461번. νŒŒλ„λ°˜ μˆ˜μ—΄  (0) 2021.01.13
[동적 κ³„νšλ²• 1] [Python] 1904번. 01타일  (0) 2021.01.12
[동적 κ³„νšλ²• 1] [Python] 1003번. ν”Όλ³΄λ‚˜μΉ˜ ν•¨μˆ˜  (0) 2021.01.12
  1. μž…λ ₯
  2. 좜λ ₯
  3. ν•΄κ²° 방법
  4. ν•΄κ²° κ³Όμ •
'✍️ μ½”ν…Œ μ€€λΉ„/Dynamic Programming' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [동적 κ³„νšλ²• 1] [C++] 1149번. RGB 거리
  • [동적 κ³„νšλ²• 1] [C++] 9461번. νŒŒλ„λ°˜ μˆ˜μ—΄
  • [동적 κ³„νšλ²• 1] [Python] 1904번. 01타일
  • [동적 κ³„νšλ²• 1] [Python] 1003번. ν”Όλ³΄λ‚˜μΉ˜ ν•¨μˆ˜
kodo_o
kodo_o
iOS κΏ€μžΌ!
🍎🍏iOS κΏ€μžΌ!
kodo_o
🍎🍏
kodo_o
전체
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (149)
    • πŸ”¨ ν”„λ‘œμ νŠΈ (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • πŸ’» 개발 (63)
      • iOS (30)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • 였늘의 μ‚½μ§ˆ (7)
      • μ—λŸ¬μ™€μ˜ 동침 (1)
    • ✏️ μ•Œκ³ λ¦¬μ¦˜ (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • ✍️ μ½”ν…Œ μ€€λΉ„ (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • πŸ“š CS (6)
      • Operating System (6)
    • ⛹️ 라이프 (30)
      • 2020 κ²¨μšΈλ°©ν•™ λͺ¨κ°μ½”(개인) (12)
      • 2021 여름방학 λͺ¨κ°μ½”(개인) (6)
      • μ½”λ”© ν…ŒμŠ€νŠΈ (1)
      • 회고 (10)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • κΉƒν—ˆλΈŒ

인기 κΈ€

졜근 κΈ€

졜근 λŒ“κΈ€

hELLO Β· Designed By μ •μƒμš°.
kodo_o
[동적 κ³„νšλ²• 1] [Python] 9184번. μ‹ λ‚˜λŠ” ν•¨μˆ˜ μ‹€ν–‰
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.