문제
https://www.acmicpc.net/problem/28438
풀이
첫 번째 시도
한 줄씩 입력을 받으면서 '1 r v'인지 '2 c v'인지 구분하며 행렬 연산을 수행했다.
더보기
N, M, Q = map(int, input().split())
mat = [[0 for _ in range(M)] for _ in range(N)]
for _ in range(Q) :
i, j, k = map(int, input().split())
if i == 1 :
r, v = j, k
for l in range(len(mat[r-1])) :
mat[r-1][l] += v
else :
c, v = j, k
for l in range(len(mat)) :
mat[l][c-1] += v
for i in mat :
print(*i)
→ 시간 초과
두 번째 시도 (성공)
입력을 받을때마다 for문을 사용해서 행렬 연산을 진행하는 부분때문에 시간 초과가 발생했다.
N x M 모양의 행렬을 만든 후 계산하는게 아니라, row와 col로 쪼개서 생각해주었다.
row[i] + col[j]는 mat[i][j]의 값과 동일하다.
import sys
input = sys.stdin.readline
N, M, Q = map(int, input().split())
row = [0 for _ in range(N)]
col = [0 for _ in range(M)]
for _ in range(Q) :
i, j, k = map(int, input().split())
if i == 1 :
r, v = j-1, k
row[r] += v
else :
c, v = j-1, k
col[c] += v
for i in range(N) :
for j in range(M) :
print(row[i] + col[j], end = ' ')
print()
728x90