백준 17144 미세먼지 안녕!

gmlwlswldbs·2021년 10월 16일
0

코딩테스트

목록 보기
52/130
r, c, t = map(int, input().split())
g = [list(map(int, input().split())) for _ in range(r)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(r):
    if g[i][0] == -1:
        sx1, sx2 = i, i+1
        break
    
def spread(g):
    tmp = [[0] * c for _ in range(r)]
    tmp[sx1][0] = -1
    tmp[sx2][0] = -1
    for x in range(r):
        for y in range(c):
            if g[x][y] == -1 or g[x][y] == 0:
                continue
            cnt = 0
            for i in range(4):
                nx, ny = x + dx[i], y + dy[i]
                if nx < 0 or ny < 0 or nx >= r or ny >= c or g[nx][ny] == -1:
                    continue
                tmp[nx][ny] += int(g[x][y] / 5)
                cnt += 1
            tmp[x][y] += g[x][y] - (cnt * int(g[x][y] / 5))
    return tmp

def clean(g):
    for i in range(sx1-2, -1, -1):
        g[i+1][0] = g[i][0]
    for i in range(1, c):
        g[0][i-1] = g[0][i]
    for i in range(1, sx1+1):
        g[i-1][c-1] = g[i][c-1]
    for i in range(c-2, 0, -1):
        g[sx1][i+1] = g[sx1][i]
    g[sx1][1] = 0
    for i in range(sx2+2, r):
        g[i-1][0] = g[i][0]
    for i in range(1, c):
        g[r-1][i-1] = g[r-1][i]
    for i in range(r-2, sx2-1, -1):
        g[i+1][c-1] = g[i][c-1]
    for i in range(c-2, 0,  -1):
        g[sx2][i+1] = g[sx2][i]
    g[sx2][1] = 0
    return g
for _ in range(t):
    g = spread(g)
    g = clean(g)


ans = 0
for i in range(r):
    for j in range(c):
        if g[i][j] <= 0:
            continue
        ans += g[i][j]
print(ans)

하라는대로 구현
공기를 회전시키는게 헷갈려서 오래걸림 -> 그림그리면 안헷갈린다...

0개의 댓글