[ BOJ / Python ] 16918번 봄버맨

황승환·2022년 6월 20일
0

Python

목록 보기
332/498


이번 문제는 간단한 시뮬레이션 문제였다. 매번 격자를 순회하며 폭탄의 위치를 리스트에 담는 함수, 폭발 함수, 폭탄을 만드는 함수를 구현하여 이를 해결하였다. 처음 1초는 가만히 있는다고 했기 때문에 n을 1 감소시켰고, n이 존재하는 동안 반복하는 while문 안에서 폭탄의 위치를 찾고, 폭탄을 만들고, n을 1 감소시킨 후, n이 0보다 클 경우에 폭탄을 담은 리스트를 순회하며 해당 위치에서의 폭발이 일어나도록 구현하였다.

Code

r, c, n=map(int, input().split())
grid=[list(str(input())) for _ in range(r)]
dy, dx=[0, 1, 0, -1], [1, 0, -1, 0]
def find_bomb():
    for i in range(r):
        for j in range(c):
            if grid[i][j]=='O':
                bombs.append((i, j))
def explode(y, x):
    grid[y][x]='.'
    for i in range(4):
        ny, nx=y+dy[i], x+dx[i]
        if 0<=ny<r and 0<=nx<c:
            grid[ny][nx]='.'
def make_bomb():
    for i in range(r):
        for j in range(c):
            if grid[i][j]=='.':
                grid[i][j]='O'
n-=1
while n:
    bombs=[]
    find_bomb()
    make_bomb()
    n-=1
    if n==0:
        break
    while bombs:
        y, x=bombs.pop()
        explode(y, x)
    n-=1
for i in range(r):
    print(''.join(grid[i]))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글