import copy
def make_map(row, colum) :
#맵 정보 가져오기 && 테두리에 -1 둘러주기
data_list = []
for i in range(row+2) : #맨 위, 맨 아래 2줄 더 추가
if i == 0 or i == row + 1 : #맨 위인경우, 맨 아래인 경우
temp = []
for i in range(colum + 2) : #-1로 테두리 만들어주기(양 옆으로도 1개씩 총 2열 추가 생성되므로 +2)
temp.append(-1)
data_list.append(temp)
else:
data_list.append(list(map(int, input().split()))) #입력 데이터 삽입
data_list[-1].insert(0, -1) #맨 앞에 테두리 -1 추가
data_list[-1].append(-1) #맨 뒤에 테두리 -1 추가
return data_list #제작된 리스트 반환
def move_all_direction(row, colum, map_data) :
#맵에 있는 1,1 좌표 부터 #위, 오른쪽, 아래, 왼쪽 방문
result_list = copy.deepcopy(map_data)
dx = [-1, 0, 1, 0] #위 0, 오른쪽 1, 아래 2, 왼쪽 3
dy = [ 0, 1, 0, -1]
for x in range(1, row+1) : #테두리에 -1 둘러져서 1부터 +1 까지 반복
for y in range(1, colum+1) :
now_value = map_data[x][y] #현재 좌표의 값 저장
for d in range(4) : #위 0, 오른쪽 1, 아래 2, 왼쪽 3
next_x = x + dx[d] #위, 오른쪽, 아래, 왼쪽 갈 x
next_y = y + dy[d] #위, 오른쪽, 아래, 왼쪽 갈 y
if map_data[next_x][next_y] != -1 :
result_list[next_x][next_y] += now_value
return result_list
if __name__ == "__main__":
row, colum = map(int, input().split())
data_list = []
data_list = make_map(row, colum) #맵 데이터 받아오기 & 테두리 -1 추가
time = int(input())
for i in range(time) :
data_list = move_all_direction(row, colum, data_list)
for i in range(1, row+1) :
print(" ".join(map(str, data_list[i][1:-1])))
문제
세로 길이 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. make_map()을 통해서 맵 테두리에 -1을 둘러준다
- 2. time 만큼 반복
- 3. 위 0, 오른쪽 1, 아래 2, 왼쪽 3 이동해줌
- 4. n칸 확산 하면서 기존 값에 계속 더해줘야 하기 때문에 그냥 copy.deepcopy(map_data)를 이용해서
2차원 리스트 깊은 복사 떠줌
'코테풀이 > BFS' 카테고리의 다른 글
[백준 | 실버1] 2178: 미로 탐색(BFS, 미로찾기 정석) (0) | 2022.03.26 |
---|---|
2단계_게임 맵 최단거리(BFS 기본 최단거리 미로찾기) (0) | 2022.02.15 |
전장속으로 - 최종 (0) | 2022.02.15 |
전장속으로 - E (0) | 2022.02.14 |
전장속으로 - D (0) | 2022.02.14 |
공기청정기 - 2차원 확산(상하좌우 이동, 깊은 복사 copy.deepcopy)