File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ def solution (matrix_sizes ):
2+ n = len (matrix_sizes )
3+
4+ # 행렬이 1개면 곱셈 연산이 필요 없음
5+ if n <= 1 :
6+ return 0
7+
8+ # dp[i][j] = i번째 행렬부터 j번째 행렬까지 곱할 때 필요한 최소 스칼라 곱셈 연산 수
9+ dp = [[0 ] * n for _ in range (n )]
10+
11+ # 행렬 차원 정보를 하나의 배열로 재구성
12+ # dimensions[i]은 i번째 행렬의 행 수, dimensions[i+1]는 i번째 행렬의 열 수
13+ dimensions = []
14+ dimensions .append (matrix_sizes [0 ][0 ])
15+ for i in range (n ):
16+ dimensions .append (matrix_sizes [i ][1 ])
17+
18+ # 길이가 2인 체인부터 n인 체인까지 계산
19+ for length in range (2 , n + 1 ):
20+ for i in range (n - length + 1 ):
21+ j = i + length - 1
22+ dp [i ][j ] = float ('inf' )
23+ for k in range (i , j ):
24+ # A_i x ... x A_k와 A_{k+1} x ... x A_j를 곱하는 연산 비용 계산
25+ cost = dp [i ][k ] + dp [k + 1 ][j ] + dimensions [i ] * dimensions [k + 1 ] * dimensions [j + 1 ]
26+ if cost < dp [i ][j ]:
27+ dp [i ][j ] = cost
28+
29+ return dp [0 ][n - 1 ]
You can’t perform that action at this time.
0 commit comments