티스토리 뷰
https://www.acmicpc.net/problem/10830
문제
크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다.
입력
첫째 줄에 행렬의 크기 N과 B가 주어진다. (2 ≤ N ≤ 5, 1 ≤ B ≤ 100,000,000,000)
둘째 줄부터 N개의 줄에 행렬의 각 원소가 주어진다. 행렬의 각 원소는 1,000보다 작거나 같은 자연수 또는 0이다.
출력
첫째 줄부터 N개의 줄에 걸쳐 행렬 A를 B제곱한 결과를 출력한다.
import sys
import copy
# N, B = map(int, sys.stdin.readline().split())
# datas = [list(map(int, sys.stdin.readline().split())) for i in range(N)]
In [2]:
N, B = 2, 5
datas = [
[1,2],
[3,4]
]
N, B = 3, 3
datas = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# N, B = 5, 10
# datas = [
# [1, 0, 0, 0, 1],
# [1, 0, 0, 0, 1],
# [1, 0, 0, 0, 1],
# [1, 0, 0, 0, 1],
# [1, 0, 0, 0, 1]
# ]
# N, B = 5, 10000
# datas = [
# [1, 0, 0, 0, 0],
# [0, 1, 0, 0, 0],
# [0, 0, 1, 0, 0],
# [0, 0, 0, 1, 0],
# [0, 0, 0, 0, 1]
# ]
# datas = [
# [999, 999, 999, 999, 999],
# [999, 999, 999, 999, 999],
# [999, 999, 999, 999, 999],
# [999, 999, 999, 999, 999],
# [999, 999, 999, 999, 999]
# ]
memos = {}
totals = copy.deepcopy(datas)
equals = [[1 if i == j else 0 for i in range(N)] for j in range(N)]
memos = {0: equals, 1:datas}
def mulAB(A, B):
global N
result = [[0 for i in range(N)] for i in range(N)]
for i in range(N):
for j in range(N):
val = 0
for k in range(N):
val = (val + ((A[i][k]%1000) * (B[k][j]%1000)))%1000
result[i][j] = val
return result
def process(key):
global memos
if (key in memos.keys()):
return memos[key]
q = int(key/2)
result = mulAB(process(q), process(key - q))
memos[key] = result
return result
for i in range(N):
print(' '.join(map(lambda a: str(a%1000), process(B)[i])))
반응형
'알고리즘' 카테고리의 다른 글
[Divide&Conquer] 백준 곱셈 1629 python3 풀이 (0) | 2020.02.16 |
---|---|
[Divide & Conquer] 백준 이항계수3 11401 python3 풀이 (0) | 2020.02.16 |
DFS와 BFS (0) | 2020.02.12 |
그래프 탐색 알고리즘(Graph Traversals) (0) | 2020.02.12 |
[Greedy] 백준 반도체설계 2352 python3 풀이 (0) | 2020.02.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- greedy
- SecurityContextRepository
- DP
- 여러 파일 하나로 합치기
- anaconda2
- Markdown Note
- Divide&Conquer
- 인쇄행고정
- 이클립스메모리분석툴
- ICPC
- Excel
- Note App
- nbconvert
- unreachable object
- Bruteforce
- anaconda설치
- graph traversals
- 스도쿠
- dynamic programming
- 엑셀
- SecurityContextPersistenceFilter
- 메모리제한
- type명령어
- minor GC
- 인쇄열고정
- ipynb
- Open ID Connect
- backtracking
- Python
- 동시설치
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함