https://www.acmicpc.net/problem/10830
💡 해결방법
# 10830
N, b = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(N)]
I = [[0]*N for _ in range(N)]
for i in range(N):
I[i][i] = 1
def square(mat, n):
if n == 1:
return matrix_multiplication(mat, I)
elif n%2 == 0:
return square(matrix_multiplication(mat, mat), n//2)
else:
return matrix_multiplication(mat, square(matrix_multiplication(mat, mat), (n-1)//2))
def matrix_multiplication(A, B, mod=1000):
ln = len(A)
C = [[0]*ln for _ in range(ln)]
for i in range(ln):
for j in range(ln):
for k in range(ln):
C[i][j] += (A[i][k] * B[k][j]) % mod
C[i][j] %= mod
return C
result = square(matrix, b)
for elm in result:
print(*elm)
🚨 틀렸던 이유
문제에서 주어진대로 입력되는 행렬 원소의 최대값이 1,000 이다. 그러므로 B가 1인 경우를 대비해서 단위 행렬(I) 를 만들어서 모듈러 연산(나머지 연산)을 행렬에 해주어야한다. 이것을 나중에 아는 바람에 한참 헤맸다..
'문제 풀이 > 백준' 카테고리의 다른 글
[G5] 백준 3020 - 개똥벌레 (Python3) (0) | 2025.02.25 |
---|---|
[S4] 백준 31797 - 아~파트 아파트(Python3) (4) | 2024.11.14 |
[S1] 백준 1992 - 쿼드트리 (Python3) (1) | 2024.11.10 |
[G5] 백준 1074 - Z (Python3) (1) | 2024.11.10 |
[S3] 백준 1463 - 1로 만들기(Python) (0) | 2024.09.05 |
댓글