[백준 16918] 봄버맨(python)

j_wisdom_h·2023년 12월 20일
0

CodingTest

목록 보기
58/58

메모리 31408KB, 시간 2900 ms

처음에 bfs로 풀려고 했는데, 어떻게 하다보니 다른 방식으로 풀게 되었다.

내가 포인트로 잡은 것은

  1. 1초 일 때는 입력된 그래프 그대로 출력
  2. 2초 이상의 짝수 시간일때는 모두 'O'출력
  3. 3초 이상의 홀수 시간일때는
    a. graph에서 'O'의 상하좌우위치에 res을 True로 만들기
    ( 폭탄이 터진 후 '.'으로 표시 될 부분을 체크)
    그 후에 res가 True일때 graph를 '.'를 바꾼다.
    b. res가 False일때 (새롭게 폭탄이 설치될 부분) graph를 'O'로 바꾼다.
    즉, 설치&폭발을 한 번에 처리했다.(2초 뒤)
    c. res를 반전시킨다.
r, c, n = map(int, input().split())

graph = [list(input()) for _ in range(r)]
res = [[True if graph[i][j] == 'O' else False for j in range(c)] for i in range(r)]

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

s = 3

def bfs(x, y):
    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:
            continue
        res[nx][ny] = True

while s <= n:
    for i in range(r):
        for j in range(c):
           if graph[i][j] == 'O':
               bfs(i, j)

    for i in range(r):
        for j in range(c):
            if res[i][j]:
                graph[i][j] = '.'
            else:
                graph[i][j] = 'O'
            res[i][j] = not res[i][j]
    s += 2

for i in range(r):
    for j in range(c):
        if n % 2 == 0:
            print('O', end='')
        else:
            print(graph[i][j], end='')
    if i < r-1: print()
profile
뚜잇뚜잇 FE개발자

0개의 댓글