728x90
문제
세로 길이 N, 가로 길이 M 인 2차원 배열이 주어진다.
이 배열의 각 칸에 들어있는 수는 1 초에 한 번 씩 자기 자신을 복사해서 상하좌우로 인접한 칸들에 더해준다.
t 초가 지난 후 배열의 상태를 출력하여라.
입력
첫 줄에 N, M 이 주어진다.
두 번째 줄부터 N 줄에 걸쳐 배열의 값이 주어진다.
마지막 줄에 t 가 주어진다.
(1 ≤ N, M ≤ 100, 1 ≤ 배열의 값, t ≤ 10)
출력
t 초 후 배열을 출력한다.
입력의 예 1
3 4
5 1 3 4
2 5 1 2
7 8 3 1
2
출력의 예 1
41 48 46 26
61 87 61 37
59 70 56 27
입력의 예 2
2 5
1 0 1 0 1
0 1 0 1 0
5
출력의 예 2
226 399 436 399 226
235 381 454 381 235
입력의 예 3
3 3
2 4 2
4 2 4
2 4 2
3
출력의 예 3
126 166 126
166 250 166
126 166 126
입력의 예 4
3 4
7 8 1 2
6 9 7 5
8 8 3 8
10
출력의 예 4
4381720 6997542 6881404 4197186
6212937 9918239 9758514 5949716
4402841 7031994 6916199 4218862
#코드
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import sys
# 세로 길이 N, 가로 길이 M 인 2차원 배열이 주어진다.
# 이 배열의 각 칸에 들어있는 수는 1 초에 한 번 씩 자기 자신을 복사해서 상하좌우로 인접한 칸들에 더해준다.
# t 초가 지난 후 배열의 상태를 출력
def doit():
global arr, getArr, n, m
# 상하좌우
dy = [-1, 1, 0, 0]
dx = [0, 0, -1, 1]
for i in range(1, n+1):
for j in range(1, m+1):
sum = 0
for k in range(4):
ny = dy[k] + i
nx = dx[k] + j
sum += arr[ny][nx]
getArr[i-1][j-1] += sum
for i in range(n):
for j in range(m):
arr[i+1][j+1] = getArr[i][j]
if __name__ == "__main__":
input = sys.stdin.readline
n, m = map(int, input().split())
getArr = [list(map(int, input().split())) for _ in range(n)]
arr = [[0]*(m+2) for _ in range(n+2)]
t = int(input())
for i in range(n):
for j in range(m):
arr[i+1][j+1] = getArr[i][j]
for _ in range(t):
doit()
for i in getArr:
for j in i:
print(j, end=' ')
print()
|
cs |
반응형