CS/알고리즘_문제풀이(파이썬)

2차원 확산

Jedy_Kim 2021. 6. 12. 14:49
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 = [-1100]
  dx = [00-11]
  
  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+2for _ 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

 

반응형

'CS > 알고리즘_문제풀이(파이썬)' 카테고리의 다른 글

밀기 알고리즘 2  (0) 2021.06.13
N칸 확산  (0) 2021.06.13
1차원 확산  (0) 2021.06.12
2차원 밀기  (0) 2021.06.12
CHEEZE  (0) 2021.06.11