[Silver I] Title: 봄버맨, Time: 4156 ms, Memory: 36672 KB -BaekjoonHub
This commit is contained in:
61
백준/Silver/16918. 봄버맨/README.md
Normal file
61
백준/Silver/16918. 봄버맨/README.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# [Silver I] 봄버맨 - 16918
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/16918)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 36672 KB, 시간: 4156 ms
|
||||
|
||||
### 분류
|
||||
|
||||
구현, 시뮬레이션
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2026년 2월 9일 20:49:58
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p><a href="https://en.wikipedia.org/wiki/Bomberman">봄버맨</a>은 크기가 R×C인 직사각형 격자판 위에서 살고 있다. 격자의 각 칸은 비어있거나 폭탄이 들어있다.</p>
|
||||
|
||||
<p>폭탄이 있는 칸은 3초가 지난 후에 폭발하고, 폭탄이 폭발한 이후에는 폭탄이 있던 칸이 파괴되어 빈 칸이 되며, 인접한 네 칸도 함께 파괴된다. 즉, 폭탄이 있던 칸이 (i, j)인 경우에 (i+1, j), (i-1, j), (i, j+1), (i, j-1)도 함께 파괴된다. 만약, 폭탄이 폭발했을 때, 인접한 칸에 폭탄이 있는 경우에는 인접한 폭탄은 폭발 없이 파괴된다. 따라서, 연쇄 반응은 없다.</p>
|
||||
|
||||
<p>봄버맨은 폭탄에 면역력을 가지고 있어서, 격자판의 모든 칸을 자유롭게 이동할 수 있다. 봄버맨은 다음과 같이 행동한다.</p>
|
||||
|
||||
<ul>
|
||||
<li>가장 처음에 봄버맨은 일부 칸에 폭탄을 설치해 놓는다. 모든 폭탄이 설치된 시간은 같다.</li>
|
||||
<li>다음 1초 동안 봄버맨은 아무것도 하지 않는다.</li>
|
||||
<li>다음 1초 동안 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다. 즉, 모든 칸은 폭탄을 가지고 있게 된다. 폭탄은 모두 동시에 설치했다고 가정한다.</li>
|
||||
<li>1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다.</li>
|
||||
<li>3과 4를 반복한다.</li>
|
||||
</ul>
|
||||
|
||||
<p>폭탄을 설치해놓은 초기 상태가 주어졌을 때, N초가 흐른 후의 격자판 상태를 구하려고 한다.</p>
|
||||
|
||||
<p>예를 들어, 초기 상태가 아래와 같은 경우를 보자.</p>
|
||||
|
||||
<pre>...
|
||||
.O.
|
||||
...</pre>
|
||||
|
||||
<p>1초가 지난 후에는 아무 일도 벌어지지 않기 때문에, 위와 같다고 볼 수 있다. 1초가 더 흐른 후에 격자판의 상태는 아래와 같아진다.</p>
|
||||
|
||||
<pre>OOO
|
||||
OOO
|
||||
OOO</pre>
|
||||
|
||||
<p>1초가 지난 후엔 가운데에 있는 폭탄이 폭발해 가운데 칸과 인접한 네 칸이 빈 칸이 된다.</p>
|
||||
|
||||
<pre>O.O
|
||||
...
|
||||
O.O
|
||||
</pre>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '<code>.</code>'로, 폭탄은 '<code>O</code>'로 주어진다.</p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p>총 R개의 줄에 N초가 지난 후의 격자판 상태를 출력한다.</p>
|
||||
|
||||
46
백준/Silver/16918. 봄버맨/봄버맨.py
Normal file
46
백준/Silver/16918. 봄버맨/봄버맨.py
Normal file
@@ -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))
|
||||
Reference in New Issue
Block a user