Skip to content

Commit 821d3f6

Browse files
committed
[Silver I] Title: 봄버맨, Time: 332 ms, Memory: 166824 KB -BaekjoonHub
1 parent 43c0232 commit 821d3f6

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
# [Silver I] 봄버맨 - 16918
2+
3+
[문제 링크](https://www.acmicpc.net/problem/16918)
4+
5+
### 성능 요약
6+
7+
메모리: 166824 KB, 시간: 332 ms
8+
9+
### 분류
10+
11+
그래프 이론, 그래프 탐색, 구현, 시뮬레이션
12+
13+
### 문제 설명
14+
15+
<p><a href="https://en.wikipedia.org/wiki/Bomberman">봄버맨</a>은 크기가 R×C인 직사각형 격자판 위에서 살고 있다. 격자의 각 칸은 비어있거나 폭탄이 들어있다.</p>
16+
17+
<p>폭탄이 있는 칸은 3초가 지난 후에 폭발하고, 폭탄이 폭발한 이후에는 폭탄이 있던 칸이 파괴되어 빈 칸이 되며, 인접한 네 칸도 함께 파괴된다. 즉, 폭탄이 있던 칸이 (i, j)인 경우에 (i+1, j), (i-1, j), (i, j+1), (i, j-1)도 함께 파괴된다. 만약, 폭탄이 폭발했을 때, 인접한 칸에 폭탄이 있는 경우에는 인접한 폭탄은 폭발 없이 파괴된다. 따라서, 연쇄 반응은 없다.</p>
18+
19+
<p>봄버맨은 폭탄에 면역력을 가지고 있어서, 격자판의 모든 칸을 자유롭게 이동할 수 있다. 봄버맨은 다음과 같이 행동한다.</p>
20+
21+
<ul>
22+
<li>가장 처음에 봄버맨은 일부 칸에 폭탄을 설치해 놓는다. 모든 폭탄이 설치된 시간은 같다.</li>
23+
<li>다음 1초 동안 봄버맨은 아무것도 하지 않는다.</li>
24+
<li>다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다. 즉, 모든 칸은 폭탄을 가지고 있게 된다. 폭탄은 모두 동시에 설치했다고 가정한다.</li>
25+
<li>1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다.</li>
26+
<li>3과 4를 반복한다.</li>
27+
</ul>
28+
29+
<p>폭탄을 설치해놓은 초기 상태가 주어졌을 때, N초가 흐른 후의 격자판 상태를 구하려고 한다.</p>
30+
31+
<p>예를 들어, 초기 상태가 아래와 같은 경우를 보자.</p>
32+
33+
<pre>...
34+
.O.
35+
...</pre>
36+
37+
<p>1초가 지난 후에는 아무 일도 벌어지지 않기 때문에, 위와 같다고 볼 수 있다. 1초가 더 흐른 후에 격자판의 상태는 아래와 같아진다.</p>
38+
39+
<pre>OOO
40+
OOO
41+
OOO</pre>
42+
43+
<p>1초가 지난 후엔 가운데에 있는 폭탄이 폭발해 가운데 칸과 인접한 네 칸이 빈 칸이 된다.</p>
44+
45+
<pre>O.O
46+
...
47+
O.O
48+
</pre>
49+
50+
### 입력
51+
52+
<p>첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '<code>.</code>'로, 폭탄은 '<code>O</code>'로 주어진다.</p>
53+
54+
### 출력
55+
56+
<p>총 R개의 줄에 N초가 지난 후의 격자판 상태를 출력한다.</p>
57+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from sys import stdin
2+
3+
R, C, N = map(int, stdin.readline().split())
4+
5+
dx, dy = [1, -1, 0, 0], [0, 0, 1, -1]
6+
7+
board = [list(stdin.readline().rstrip()) for _ in range(R)]
8+
9+
if N % 2 == 0:
10+
print(*["O" * C for _ in range(R)], sep="\n")
11+
exit(0)
12+
13+
for _ in range(N // 2):
14+
bomb = [[i, j] for i in range(R) for j in range(C) if board[i][j] == "O"]
15+
for x, y in bomb:
16+
for i in range(4):
17+
nx, ny = x + dx[i], y + dy[i]
18+
if nx < 0 or nx >= R or ny < 0 or ny >= C: continue
19+
board[nx][ny] = "O"
20+
21+
board = [["O" if board[i][j] == "." else "." for j in range(C)] for i in range(R)]
22+
23+
for i in board:
24+
print(*i, sep="")

0 commit comments

Comments
 (0)