🎈 1 분할 정복을 사용하는 방법
<😥 첫번째 코드>
def power(exp):
global matrix_
if exp == 1:
return matrix_ % 1000
if exp % 2 == 0:
n = power(exp // 2)
return np.dot(n, n) % 1000
elif exp % 2 == 1:
n = np.dot(power(exp-1), matrix_)
return n % 1000
안된 이유 : 런타임 에러가 자꾸 떠서 왜그런가 싶었는데 다들 그 사실 아시나요 ?? 백준은 numpy가 안된다는 사실을 ???? 저는 방금 알았는데 ,,, for문으로 다시 곱셈해야 될 듯 ..
<😍 두번째 코드>
def power(exp):
global n, matrix
matrix_ = [[0 for _ in range(n)] for _ in range(n)]
if exp == 1:
for i in range(n):
for j in range(n):
matrix[i][j] %= 1000
return matrix
if exp % 2 == 0:
a = power(exp // 2)
for i in range(n):
for j in range(n):
for k in range(n):
matrix_[i][j] += a[i][k] * a[k][j]
for i in range(n):
for j in range(n):
matrix_[i][j] %= 1000
return matrix_
elif exp % 2 == 1:
a = power(exp-1)
for i in range(n):
for j in range(n):
for k in range(n):
matrix_[i][j] += a[i][k] * matrix[k][j]
for i in range(n):
for j in range(n):
matrix_[i][j] %= 1000
return matrix_
처음 문제를 봤을 때 분할 정복을 왜 사용해야 되는지 이해가 안갔다. 그냥 계속해서 곱하면 안되는가에 대해 고민을 해봤는데, 생각보다 답을 찾아내는게 쉽지 않았고 결국 백준에서 제공되는 관련된 알고리즘을 본 결과 분할 정복을 이용한 거듭제곱이라는 것이 있다는 것을 알게 되었다. 런타임 에러가 자꾸 떠서 왜그런가 싶었는데 ,,, 다들 numpy를 사용하지 않고 푼 경우 밖에 없었다 ,, 혹시나 했는데 백준은 numpy사용이 안된다 ,, 프로그래머스는 사용 되던데 ㅠㅠ 리스트로 구현하는게 이렇게 어려운 일이었다니 ,, 너무 헷갈린다 ,,