GraphTraversal_06_봄버맨(16918)

Eugenius1st·2022년 5월 15일
0

Algorithm_Baekjoon

목록 보기
109/158
post-thumbnail

GraphTraversal06봄버맨(16918)

문제


입력

첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다.

출력

총 R개의 줄에 N초가 지난 후의 격자판 상태를 출력한다.

풀이

  • 탄 위치 찾아 bombs deque에 저장하는 함수 정의
  • 모든 자리에 폭탄을 설치하는 함수 정의
  • bombs deque에 들어있는 좌표로 폭탄을 터트리는 함수 정의. bombs.popleft하여 좌표값 받고, 상 우 하 좌 에 있는 좌표로 폭탄을 터뜨린다.
  • 3 : 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다 → make_bombs()
  • 4 : 1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다 → explode()

코드

import sys
sys.stdin = open("input.txt", "rt")
# 16918, 봄버맨
import sys
from collections import deque

def loc_bombs():    # 폭탄 위치 찾아 bombs deque에 저장
    for i in range(R):
        for j in range(C):
            if board[i][j] == 'O':
                bombs.append((i, j))


def make_bombs():   # 모든 자리에 폭탄 설치
    for i in range(R):
        for j in range(C):
            if board[i][j] == '.':
                board[i][j] = 'O'


def explode():      # bombs deque에 들어있는 좌표로 폭탄 터트림
    while bombs:
        r, c = bombs.popleft()
        board[r][c] = '.'
        if 0 <= r - 1:
            board[r - 1][c] = '.'
        if r + 1 < R:
            board[r + 1][c] = '.'
        if 0 <= c - 1:
            board[r][c - 1] = '.'
        if c + 1 < C:
            board[r][c + 1] = '.'


R, C, N = map(int, sys.stdin.readline().split())
board = [list(sys.stdin.readline().rstrip()) for _ in range(R)]

N -= 1  # 1초 동안 아무것도 하지 않는다
while N:
    bombs = deque()
    loc_bombs()
    make_bombs()
    N -= 1
    if N == 0:
        break
    explode()
    N -= 1

for i in range(len(board)):
    for j in range(len(board[0])):
        print(board[i][j], end='')
    print()
    

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글