2021. 12. 26. 10:20ใ๐ฑ Algorithm/Else
ํ์ง ๋ชปํ ์ด์
1. ํ๋ ฌ ๊ณฑ์ ์ฝ๋๋ก ํ์ด๋ด์ง ๋ชปํจ.
2. ์ฌ๊ท๋ฅผ ์ ์ ํ ํ์ฉํ์ง ๋ชปํจ
3. ์ฌ๊ท ํ์ถ ์กฐ๊ฑด ๋ง์ด๋ผ๋ ์์๋ค๋ฉด ํ์ด์ ์ ๊ทผํ ์ ์์์
4. ๋ง์ง๋ง ์กฐ๊ฑด (1000 ์ดํ) ์ ์ ์ ํ ๋์ฒํ์ง ๋ชปํจ.
ํ์ด
์ด ๋ฌธ์ ์ ํต์ฌ์ DP ๋ผ๊ณ ํ๋๋ฐ, ์ฌ์ค ํ๋ ฌ์ ๊ณฑ์ ์ ์ฝ๋๋ก ํ์ด๋ด๋ ๊ฒ ์ญ์ ํต์ฌ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํ๋ ฌ์ ๊ณฑ์ ์ ์ด๋ฐ์์ผ๋ก ์งํ๋๋ค. (1, 3) x (3, 1) ์ฒ๋ผ ์ ํ๋ ฌ์ ๋๋ฒ์งธ ์ขํ(3) ์ ๋ท ํ๋ ฌ์ ์ฒซ๋ฒ์งธ ์ขํ(3) ๊ฐ ๊ฐ์์ผ ํ๋ ฌ์ ๊ณฑ์ด ์ด๋ฃจ์ด์ง๋ค. 10๋ ์ ์คํ๊ต ์ํ๊ณผ์ ์์ ๋ฐฐ์ด ๊ธฐ์ต์ด ๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ํ์ด๋ผ ๋๋ ์ด ์๋ฆฌ๋ฅผ ์ ์ฉํ๋๊ฒ ์ค์ํ๋ค.
def matrix_mul(mat_a, mat_b):
length = len(mat_a)
temp = [[0] * length for _ in range(length)]
for i in range(length):
for j in range(length):
for k in range(length):
temp[i][j] += mat_a[i][k] * mat_b[k][j]
return temp
์ฌ๊ธฐ์ temp ๋ผ๋ ์์๊ฐ ๋ชจ๋ 0์ธ ์์ ๋ฐฐ์ด์ ์์ฑํ๋ค. temp ๋ ๊ฐ ํ๋ ฌ์ ๊ณฑ์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ๊ณ , ๋งค๋ฒ matrix_mul() ์ด ํธ์ถ๋ ๋๋ง๋ค ์ด๊ธฐํ ๋๋ค. ์ฆ ๋์ผ ํ๋ ฌ์ ์ ๊ณฑ์ temp ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฆฌํดํ๋ ๊ฒ์ด๋ค.
์ฝ๋
import sys
def matrix_mul(mat_a, mat_b):
length = len(mat_a)
temp = [[0] * length for _ in range(length)]
for i in range(length):
for j in range(length):
for k in range(length):
temp[i][j] += mat_a[i][k] * mat_b[k][j]
temp[i][j] %= 1000
return temp
def matrix_pow(original, n):
if n == 1:
return original
if n % 2 == 0:
temp = matrix_pow(original, n // 2)
return matrix_mul(temp, temp)
else:
temp = matrix_pow(original, n - 1)
return matrix_mul(temp, original)
read = sys.stdin.readline
N, M = map(int, read().split())
matrix = [list(map(int, read().split())) for _ in range(N)]
result = matrix_pow(matrix, M)
for row in result:
for num in row:
print(num % 1000, end=' ')
print()
'๐ฑ Algorithm > Else' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 16953 ํ์ด์ฌ (0) | 2022.01.25 |
---|---|
๋ฐฑ์ค 2003 ํ์ด์ฌ (0) | 2022.01.07 |
ํ๋ก๊ทธ๋๋จธ์ค [lv1] ๋ก๋์์ต๊ณ ์์์์ต์ ์์ ํ์ด์ฌ (0) | 2021.05.18 |
ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ๋ก๋ฑ ํ์ด์ฌ (0) | 2021.05.16 |
ํ๋ก๊ทธ๋๋จธ์ค [lv4] N-Queen ํ์ด์ฌ (0) | 2021.05.16 |