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 |