boj 17144 미세먼지안녕 (골드4)

김준오·2022년 4월 26일
0

알고리즘

목록 보기
87/91
post-thumbnail

문제

https://www.acmicpc.net/problem/17144

내 풀이

r, c, t = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(r)]

dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]

temp = [arr[i][:] for i in range(r)] # 확산내용 기록용

for _ in range(t):
    for i in range(r):
        for j in range(c):
            if arr[i][j] > 0:  # 먼지가 있으면 확산
                for k in range(4):
                    ny, nx = i + dy[k], j + dx[k]
                    if ny < 0 or ny >= r or nx < 0 or \
                            nx >= c or arr[ny][nx] == -1:
                        continue

                    temp[ny][nx] += int(arr[i][j] / 5)
                    temp[i][j] -= int(arr[i][j] / 5)

    arr = [temp[i][:] for i in range(r)]

    cleaner_row = -1  # 공기청정기 y좌표
    for i in range(r):   # 공기청정기 있는 row 참색
        if arr[i][0] == -1:
            cleaner_row = i
            break

    temp = [arr[i][:] for i in range(r)] # 확산내용 기록용
    for i in range(r):
        for j in range(c):
            ## 청정기 위쪽부분
            for k in range(cleaner_row, 0, -1):
                temp[k][0] = arr[k-1][0]
            # temp[cleaner_row][0] = 0

            for k in range(c-1):
                temp[0][k] = arr[0][k+1]

            for k in range(cleaner_row):
                temp[k][c-1] = arr[k+1][c-1]

            for k in range(c-1):
                temp[cleaner_row][k+1] = arr[cleaner_row][k]

            temp[cleaner_row][1] = 0


            ## 청정기 아래쪽 부분
            for k in range(cleaner_row+1, r-1):
                temp[k][0] = arr[k+1][0]
            # temp[cleaner_row+1][0] = 0

            for k in range(c-1):
                temp[r-1][k] = arr[r-1][k+1]

            for k in range(cleaner_row+1, r-1):
                temp[k+1][c-1] = arr[k][c-1]

            for k in range(c-1):
                temp[cleaner_row+1][k+1] = arr[cleaner_row+1][k]

            temp[cleaner_row+1][1] = 0
            temp[cleaner_row][0] = -1
            temp[cleaner_row+1][0] = -1


    arr = [temp[i][:] for i in range(r)]

answer = 0
for i in range(r):
    for j in range(c):
        answer += arr[i][j] if arr[i][j] != -1 else 0

print(answer)
profile
jooooon

0개의 댓글

관련 채용 정보