2026년 2월 25일
[백준] 16918 봄버맨 (Python)
문제 설명
- 폭탄을 설치해놓은 초기 상태가 주어졌을 때, N초가 흐른 후의 격자판 상태를 구하는 문제
예제 입력/출력
- 예제 입력 1
6 7 3 ....... ...O... ....O.. ....... OO..... OO.....
- 예제 출력 1
OOO.OOO OO...OO OOO...O ..OO.OO ...OOOO ...OOOO
제약 조건
문제 풀이
1️⃣ 시뮬레이션

먼저 초 단위로 봄버맨이 어떤 행동을 하는지를 그림으로 그려보았다.
- 0초: 봄버맨이 일부 칸에 폭탄을 설치해 놓는다. (입력값)
- 1초: 아무 일도 일어나지 않는다.
- 2초: 빈 칸에
풀이 코드
R, C, N = map(int, input().split()) grid = [list(input()) for _ in range(R)] booms = [[-1] * C for _ in range(R)] for r in range(R): for c in range(C): if grid[r][c] == 'O': booms[r][c] = 3 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] for t in range(1, N + 1): # 1. 시간 감소 for r in range(R): for c in range(C): if booms[r][c] != -1: booms[r][c] -= 1 # 2. 짝수 초 → 설치 if t % 2 == 0: for r in range(R): for c in range(C): if grid[r][c] == '.': grid[r][c] = 'O' booms[r][c] = 3 # 3. 홀수 초 → 폭발 (폭발 위치 기억해뒀다가 한꺼번에 터뜨리기) else: explode = [] for r in range(R): for c in range(C): if booms[r][c] == 0: explode.append((r, c)) for r, c in explode: booms[r][c] = -1 grid[r][c] = '.' for d in range(4): nr = r + dx[d] nc = c + dy[d] if 0 <= nr < R and 0 <= nc < C: booms[nr][nc] = -1 grid[nr][nc] = '.' for r in range(R): print("".join(grid[r]))
