[Python] 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ

2026. 3. 20. 12:11ยทCoding-Test/๋ฐฑ์ค€
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป ๋ฌธ์ œ ์ •์˜

ํฌ๊ธฐ๊ฐ€ N×M์ธ ํ–‰๋ ฌ A์™€ M×K์ธ B๋ฅผ ๊ณฑํ•  ๋•Œ ํ•„์š”ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์˜ ์ˆ˜๋Š” ์ด N×M×K๋ฒˆ์ด๋‹ค. ํ–‰๋ ฌ N๊ฐœ๋ฅผ ๊ณฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์˜ ์ˆ˜๋Š” ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A์˜ ํฌ๊ธฐ๊ฐ€ 5×3์ด๊ณ , B์˜ ํฌ๊ธฐ๊ฐ€ 3×2, C์˜ ํฌ๊ธฐ๊ฐ€ 2×6์ธ ๊ฒฝ์šฐ์— ํ–‰๋ ฌ์˜ ๊ณฑ ABC๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

  • AB๋ฅผ ๋จผ์ € ๊ณฑํ•˜๊ณ  C๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒฝ์šฐ (AB)C์— ํ•„์š”ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์˜ ์ˆ˜๋Š” 5×3×2 + 5×2×6 = 30 + 60 = 90๋ฒˆ์ด๋‹ค.
  • BC๋ฅผ ๋จผ์ € ๊ณฑํ•˜๊ณ  A๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒฝ์šฐ A(BC)์— ํ•„์š”ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์˜ ์ˆ˜๋Š” 3×2×6 + 5×3×6 = 36 + 90 = 126๋ฒˆ์ด๋‹ค.

๊ฐ™์€ ๊ณฑ์…ˆ์ด์ง€๋งŒ, ๊ณฑ์…ˆ์„ ํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ์„œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์˜ ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

ํ–‰๋ ฌ N๊ฐœ์˜ ํฌ๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ชจ๋“  ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๐Ÿ’ก ์ ‘๊ทผ ๋ฐ ์„ค๊ณ„

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜์˜€๋‹ค. ์ฃผ์–ด์ง„ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ ๋ฐฐ์—ด์—์„œ, ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค ๋งŒํผ ๊นŒ์ง€ ์—ฐ์‚ฐํ•˜์˜€์„ ๋•Œ ์ตœ์†Ÿ๊ฐ’์„ DPํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์ƒ๊ฐํ•˜์˜€๋‹ค.

N = 3, arr = [[5, 3], [3, 2], [2, 6]] ์ผ๋•Œ ์ตœ์ข…์ ์œผ๋กœ dp[0][2]์— ์šฐ๋ฆฌ๊ฐ€ ์ถœ๋ ฅํ•ด์•ผํ•  ์ตœ์†Ÿ๊ฐ’์ด ์ €์žฅ๋  ๊ฒƒ์ด๋‹ค.

dp[0][2] = min(dp[0][0] + dp[1][2] + ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ ํšŸ์ˆ˜, dp[0][1] + dp[2][2] + ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ ํšŸ์ˆ˜) ⇒ $min(A \cdot (BC), (AB) \cdot C)$ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด

INF = 2**31

dp = [[INF] * N for _ in range(N)]

for i in range(N):
    dp[i][i] = 0

DPํ…Œ์ด๋ธ”์„ INF ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ค€๋‹ค. dp[i][i] ๋ถ€๋ถ„์€ ์ž๊ธฐ์ž์‹  ํ–‰๋ ฌ๊ณฑ ์—ฐ์‚ฐ์ด๋ฏ€๋กœ 0์„ ๋„ฃ์–ด์ค€๋‹ค.

for i in range(1, N):
    for j in range(N-i):
        for k in range(j, j+i):
            temp = dp[j][k] + dp[k+1][j+i] + (matrix[j][0] * matrix[k][1] * matrix[j+i][1])
            dp[j][j+i] = min(dp[j][j+i], temp)

3์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด DP ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

i : dp๋ฅผ ๊ตฌํ•  ๋ฒ”์œ„๋ฅผ ์ง€์ •

j : ๊ตฌํ•˜๊ณ  ์‹ถ์€ dp์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค

k : ์„œ๋ธŒ ํ–‰๋ ฌ๋กœ ์ชผ๊ฐค ๊ธฐ์ค€์ 

dp[0][2]์—์„œ k=1์ด๋ฉด dp[0][1] + dp[2][2] k=0์ด๋ฉด dp[0][0] + dp[1][2]

matrix[j][0] * matrix[k][1] * matrix[j+i][1] : ํ–‰๋ ฌ ์—ฐ์‚ฐ ํšŸ์ˆ˜. ์ฆ‰, [5, 3], [3, 2] ๋‘ ๊ฐœ์˜ ํ–‰๋ ฌ์„ ์—ฐ์‚ฐํ•œ๋‹ค๊ณ  ํ•˜์˜€์„ ๋•Œ, dp[0][1] = ~~~ + (5 * 3 * 2) ๊ฐ€ ๋œ๋‹ค.

๐Ÿ—’๏ธ ์ตœ์ข… ์ œ์ถœ ์ฝ”๋“œ (PyPy3 ์ œ์ถœ)

# 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ

import sys
input = sys.stdin.readline

INF = 2**31

N = int(input())

matrix = []
for _ in range(N):
    matrix.append(list(map(int, input().split())))

dp = [[INF] * N for _ in range(N)]

for i in range(N):
    dp[i][i] = 0

for i in range(1, N):
    for j in range(N-i):
        for k in range(j, j+i):
            temp = dp[j][k] + dp[k+1][j+i] + (matrix[j][0] * matrix[k][1] * matrix[j+i][1])
            dp[j][j+i] = min(dp[j][j+i], temp)

print(dp[0][N-1])

๐Ÿ’ญ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

-

728x90
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Coding-Test > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] 1766 ๋ฌธ์ œ์ง‘  (0) 2026.03.26
[Python] 2342 Dance Dance Revolution  (0) 2026.03.20
[Python] 16947 ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„   (0) 2026.03.19
[Python] 2613 ์ˆซ์ž๊ตฌ์Šฌ  (0) 2026.03.18
[Python] 16946 ๋ฒฝ ๋ถ€์ˆ˜๊ณ  ์ด๋™ํ•˜๊ธฐ 4  (0) 2026.03.17
'Coding-Test/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Python] 1766 ๋ฌธ์ œ์ง‘
  • [Python] 2342 Dance Dance Revolution
  • [Python] 16947 ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„ 
  • [Python] 2613 ์ˆซ์ž๊ตฌ์Šฌ
ํฌ์™„
ํฌ์™„
ํฌ์™„ํ•œ ์ฝ”๋”ฉ์ผ์ƒ
    ๋ฐ˜์‘ํ˜•
  • ํฌ์™„
    Code-Heewan
    ํฌ์™„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • Python
        • ๊ฐ€์ƒํ™˜๊ฒฝ
      • Algorithm
      • Coding-Test
        • ๋ฐฑ์ค€
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
        • ํ•ญํ•ด99
      • Data-Analysis
      • ์›น ๊ฐœ๋ฐœ
        • django
      • AWS
      • ๊ณต๋ชจ์ „
      • Mobile
  • ๋งํฌ

    • Github
  • 300x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํฌ์™„
[Python] 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ
์ƒ๋‹จ์œผ๋กœ

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