From a9ce5948b0706b79e9e49c6078846d9e25c38566 Mon Sep 17 00:00:00 2001 From: SSUM <116950962+ssum21@users.noreply.github.com> Date: Mon, 9 Feb 2026 20:51:32 +0900 Subject: [PATCH] =?UTF-8?q?[Silver=20I]=20Title:=20=EB=B4=84=EB=B2=84?= =?UTF-8?q?=EB=A7=A8,=20Time:=204156=20ms,=20Memory:=2036672=20KB=20-Baekj?= =?UTF-8?q?oonHub?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 백준/Silver/16918. 봄버맨/README.md | 61 +++++++++++++++++++++++++++++ 백준/Silver/16918. 봄버맨/봄버맨.py | 46 ++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 백준/Silver/16918. 봄버맨/README.md create mode 100644 백준/Silver/16918. 봄버맨/봄버맨.py diff --git a/백준/Silver/16918. 봄버맨/README.md b/백준/Silver/16918. 봄버맨/README.md new file mode 100644 index 0000000..4ff2216 --- /dev/null +++ b/백준/Silver/16918. 봄버맨/README.md @@ -0,0 +1,61 @@ +# [Silver I] 봄버맨 - 16918 + +[문제 링크](https://www.acmicpc.net/problem/16918) + +### 성능 요약 + +메모리: 36672 KB, 시간: 4156 ms + +### 분류 + +구현, 시뮬레이션 + +### 제출 일자 + +2026년 2월 9일 20:49:58 + +### 문제 설명 + +

봄버맨은 크기가 R×C인 직사각형 격자판 위에서 살고 있다. 격자의 각 칸은 비어있거나 폭탄이 들어있다.

+ +

폭탄이 있는 칸은 3초가 지난 후에 폭발하고, 폭탄이 폭발한 이후에는 폭탄이 있던 칸이 파괴되어 빈 칸이 되며, 인접한 네 칸도 함께 파괴된다. 즉, 폭탄이 있던 칸이 (i, j)인 경우에 (i+1, j), (i-1, j), (i, j+1), (i, j-1)도 함께 파괴된다. 만약, 폭탄이 폭발했을 때, 인접한 칸에 폭탄이 있는 경우에는 인접한 폭탄은 폭발 없이 파괴된다. 따라서, 연쇄 반응은 없다.

+ +

봄버맨은 폭탄에 면역력을 가지고 있어서, 격자판의 모든 칸을 자유롭게 이동할 수 있다. 봄버맨은 다음과 같이 행동한다.

+ + + +

폭탄을 설치해놓은 초기 상태가 주어졌을 때, N초가 흐른 후의 격자판 상태를 구하려고 한다.

+ +

예를 들어, 초기 상태가 아래와 같은 경우를 보자.

+ +
...
+.O.
+...
+ +

1초가 지난 후에는 아무 일도 벌어지지 않기 때문에, 위와 같다고 볼 수 있다. 1초가 더 흐른 후에 격자판의 상태는 아래와 같아진다.

+ +
OOO
+OOO
+OOO
+ +

1초가 지난 후엔 가운데에 있는 폭탄이 폭발해 가운데 칸과 인접한 네 칸이 빈 칸이 된다.

+ +
O.O
+...
+O.O
+
+ +### 입력 + +

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

+ +### 출력 + +

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

+ diff --git a/백준/Silver/16918. 봄버맨/봄버맨.py b/백준/Silver/16918. 봄버맨/봄버맨.py new file mode 100644 index 0000000..d72abc5 --- /dev/null +++ b/백준/Silver/16918. 봄버맨/봄버맨.py @@ -0,0 +1,46 @@ +from collections import deque + +dx = [0, 0, -1, 1] +dy = [1, -1, 0, 0] +grid = [] # 격자판 +boomList = deque() # 폭탄 좌표 리스트 + +R, C, N = map(int, input().split()) + +for i in range(R): # 격자판 정보 입력 + row = list(input()) + for j in range(C): + if row[j] == 'O': # 처음 폭탄 좌표들 저장 + boomList.append([i, j]) + grid.append(row) + +t = 1 # 처음 1초가 지난 후에 격자판에 아무 일도 벌어지지 않기 때문에, 초기 시간을 1로 잡아도 된다. + +while t < N: + + for i in range(R): # 폭탄 채워넣기 + for j in range(C): + if grid[i][j] == '.': + grid[i][j] = 'O' + + t += 1 + if t == N: + break + + while boomList: # 폭탄 터트리기 + x, y = boomList.popleft() + grid[x][y] = '.' + for i in range(4): + nx, ny = x + dx[i], y + dy[i] + if 0 <= nx < R and 0 <= ny < C: + grid[nx][ny] = '.' + + for i in range(R): # 폭탄 터지고 남은 폭탄들 저장 + for j in range(C): + if grid[i][j] == 'O': + boomList.append([i, j]) + + t += 1 + +for g in grid: + print(''.join(g)) \ No newline at end of file