이번 문제는 문제에서 주어진 내용대로 구현을 하는 문제이다. 미세먼지가 퍼지는 함수를 작성하고, 공기청정기가 한바퀴 도는 함수를 작성하였다. 혼자 힘으로 코드를 작성하다가 막히는 부분들이 조금 존재하여 다른 사람의 코드를 참고하였다.
미세먼지가 퍼지는 함수는 동서남북 방향으로 가능한지 확인한 후, 가능한 경우에만 퍼지도록 하였고 기존 그래프가 아닌 새로운 그래프에 변경 사항을 갱신하도록 하였다. 가능한 경우 새로운 그래프의 해당 인덱스에 기존 그래프의 값을 5로 나눈 값을 더하였고, 새로운 그래프의 현재 인덱스를 미세먼지가 퍼지고 난 수로 갱신하였다.
공기청정기가 한바퀴 도는 함수는 총 8개의 for문을 사용하였다. 먼저 위의 공기청정기에 해당하는 반시계방향으로의 회전을 작성하였고, 아래 공기청정기에 해당하는 시계방향으로의 회전을 작성하였다. 그리고 공기청정기의 바로 오른쪽 인덱스는 무조건 0이 나오므로 0으로 갱신해주었다.
def spread():
for x in range(r):
for y in range(c):
if board[x][y] > 0:
cnt = 0
for i in range(4):
nx, ny = x+dx[i], y+dy[i]
if not(0<=nx<r and 0<=ny<c): continue
if board[x][y]<5:continue
if (nx, ny)==(cleaner[0], 0): continue
if (nx, ny)==(cleaner[1], 0): continue
cnt+=1
board2[nx][ny]+=board[x][y]//5
board2[x][y]+=(board[x][y]-board[x][y]//5*cnt)
def cleaning():
for i in range(cleaner[0]-2, -1, -1):
board2[i+1][0] = board2[i][0]
for i in range(1, c):
board2[0][i-1] = board2[0][i]
for i in range(1, cleaner[0]+1):
board2[i-1][-1] = board2[i][-1]
for i in range(c-2, 0, -1):
board2[cleaner[0]][i+1] = board2[cleaner[0]][i]
board2[cleaner[0]][1] = 0
for i in range(cleaner[1]+2, r):
board2[i-1][0] = board2[i][0]
for i in range(1, c):
board2[-1][i-1] = board2[-1][i]
for i in range(r-2, cleaner[1]-1, -1):
board2[i+1][-1] = board2[i][-1]
for i in range(c-2, 0, -1):
board2[cleaner[1]][i+1] = board2[cleaner[1]][i]
board2[cleaner[1]][1] = 0
r, c, t = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(r)]
cleaner = []
for i in range(r):
if board[i][0] == -1:
cleaner.append(i)
dx = (0, 0, -1, 1)
dy = (-1, 1, 0, 0)
board2 = [[0]*c for _ in range(r)]
spread()
cleaning()
for time in range(t-1):
board = board2.copy()
board2 = [[0]*c for _ in range(r)]
spread()
cleaning()
answer = 0
for i in range(r):
for j in range(c):
if board2[i][j] > 0:
answer+=board2[i][j]
print(answer)