알고리즘/백준
[백준] 17144 - 미세먼지 안녕! (파이썬)
소갱
2021. 9. 25. 20:07
import sys
input = sys.stdin.readline
R, C, T = map(int,input().split())
array = []
for _ in range(R):
array.append(list(map(int,input().split())))
air = []
for i in range(R):
if array[i][0] == -1:
air.append(i)
air.append(i+1)
break
dx = [-1,0,1,0]
dy = [0,1,0,-1]
def top_square(start):
array[start-1][0] = 0
for i in range(start-1,0,-1):
array[i][0] = array[i-1][0]
for i in range(C-1):
array[0][i] = array[0][i+1]
for i in range(start):
array[i][C-1] = array[i+1][C-1]
for i in range(C-1,1,-1):
array[start][i] = array[start][i-1]
array[start][1] = 0
def bottom_square(start):
array[start+1][0] = 0
for i in range(start+1,R-1):
array[i][0] = array[i+1][0]
for i in range(0,C-1):
array[R-1][i] = array[R-1][i+1]
for i in range(R-1,start,-1):
array[i][C-1] = array[i-1][C-1]
for i in range(C-1,1,-1):
array[start][i] = array[start][i-1]
array[start][1] = 0
#T초
for _ in range(T):
storage = []
for x in range(R):
for y in range(C):
if array[x][y] >= 1:
temp = array[x][y]
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if 0<=nx<R and 0<=ny<C:
if array[nx][ny] != -1:
storage.append([nx,ny,array[x][y]//5])
temp -= array[x][y]//5
array[x][y] = temp
for i in storage:
array[i[0]][i[1]] += i[2]
top_square(air[0])
bottom_square(air[1])
cnt = 0
for i in range(R):
for j in range(C):
if array[i][j] != -1:
cnt += array[i][j]
print(cnt)
윗부분 아랫부분 나누어서 함수를 만들었다. 2차원 배열에서 직사각형으로 도는건.. 진짜 꾸준히 나온다