Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- webpack
- 갓생
- 크롬 확장자
- 디스코드 봇
- 캠스터디
- nodejs
- 동적계획법
- 백준
- supabase
- Chrome Extension
- background script
- popup
- 포도주시식
- 2156
- react
- 프로그래머스 #정수삼각형 #동적계획법
- 백준 7579
- C언어로 쉽게 풀어쓴 자료구조
- 공부시간측정어플
- Message Passing
- 크롬 익스텐션
- 백준 #7568번 #파이썬 #동적계획법
- 자료구조
- 파이썬
- discord.js
- TypeScript
- X
- content script
Archives
- Today
- Total
히치키치
[백준] 10830 : 행렬 제곱 - Python(파이썬) 본문
문제
빠른 거듭제곱 계산
풀이
- 분할 정복 & 재귀
- 빠른 거듭제곱 계산
- 거듭제곱 나누기 -> 행렬 계산 : 재귀적으로 구현
코드
#문제: https://www.acmicpc.net/problem/10830
def multi_mat(n,m1,m2):
result=[[0 for _ in range(n)] for _ in range(n)] #계산 결과 담는 행렬
for i in range(n):
for j in range(n):
for k in range(n):
result[i][j]+=m1[i][k]*m2[k][j] #행렬 계산 값을 결과 담는 행렬에 넣어줌
result[i][j]%=1000 #1000으로 나눈 나머지
return result
def dev(n,x,mat):
if x==1: #종료 : x // 2 = n = 0
return mat
else:
tmp=dev(n,x//2,mat)
if x%2==0: #짝수 제곱
return multi_mat(n,tmp,tmp)
else: #홀수 제곱
return multi_mat(n,multi_mat(n,tmp,tmp),mat)
n,x=map(int, input().split())
a=[list(map(int,input().split())) for _ in range(n)]
result=dev(n,x,a)
for i in result:
for j in i:
print(j%1000,end=' ') #종료 시 행렬이 그대로 반환 됨으로 %1000연산 필요함
print()
'알고리즘 스터디' 카테고리의 다른 글
[백준] 11559번 : Puyo Puyo - Python(파이썬) (0) | 2021.05.03 |
---|---|
[백준] 14002 : 가장 긴 증가하는 부분수열 - Python(파이썬) (0) | 2021.05.03 |
[백준] 2839번 : 설탕배달 - Python(파이썬) (0) | 2021.03.30 |
[백준] 11399번 : ATM - Python(파이썬) (0) | 2021.03.30 |
[백준] 16234번 : 인구이동 - Python(파이썬) (0) | 2021.03.29 |
Comments