백준 17144 미세먼지 안녕!

조항주·2022년 4월 24일
0

algorithm

목록 보기
50/50
post-thumbnail

문제

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

코드

# 시뮬레이션
r,c,t=map(int,input().split())

board=[list(map(int,input().split())) for _ in range(r)]
for i in range(r):
    for j in range(c):
        if board[i][j]==-1:
            by=i


d=[[0,1],[0,-1],[1,0],[-1,0]]

# 확산
def diffusion(board):
    result=[[0]*c for _ in range(r)]
    for i in range(r):
        for j in range(c):
            if board[i][j]>0:
                cnt=0
                for dy,dx in d:
                    ny=dy+i
                    nx=dx+j
                    if 0<=ny<r and 0<=nx<c and board[ny][nx]!=-1:
                        cnt+=1
                        result[ny][nx]+=board[i][j]//5
                result[i][j]+=board[i][j]-board[i][j]//5*cnt
            elif board[i][j]==-1:
                result[i][j]=-1

    return result

# 공기청정기 돌리기
def run(board,by):
    ty=by-1

    for i in range(ty-2,-1,-1):
        board[i+1][0]=board[i][0]
    for i in range(1,c):
        board[0][i-1]=board[0][i]
    for i in range(1,ty+1):
        board[i-1][c-1]=board[i][c-1]
    for i in range(c-2,0,-1):
        board[ty][i+1]=board[ty][i]
    board[ty][1]=0
    for i in range(by+2,r):
        board[i-1][0]=board[i][0]
    for i in range(1,c):
        board[r-1][i-1]=board[r-1][i]
    for i in range(r-2,by-1,-1):
        board[i+1][c-1]=board[i][c-1]
    for i in range(c-2,0,-1):
        board[by][i+1]=board[by][i]
    board[by][1]=0

# 시뮬
for _ in range(t):
    board=diffusion(board)
    run(board,by)

# 카운팅
answer=0
for i in range(r):
    for j in range(c):
        answer+=board[i][j]
print(answer+2)

풀이

시뮬레이션 문제로 미세먼지가 확산하는 함수와 공기청정기가 작동하는 함수를 만들어서 풀이했습니다

0개의 댓글