[๋ฐฑ์ค 16918 ๐ฅ] ๋ด๋ฒ๋งจ
๋ฌธ์
๋ด๋ฒ๋งจ์ ํฌ๊ธฐ๊ฐ R×C์ธ ์ง์ฌ๊ฐํ ๊ฒฉ์ํ ์์์ ์ด๊ณ ์๋ค. ๊ฒฉ์์ ๊ฐ ์นธ์ ๋น์ด์๊ฑฐ๋ ํญํ์ด ๋ค์ด์๋ค.
ํญํ์ด ์๋ ์นธ์ 3์ด๊ฐ ์ง๋ ํ์ ํญ๋ฐํ๊ณ , ํญํ์ด ํญ๋ฐํ ์ดํ์๋ ํญํ์ด ์๋ ์นธ์ด ํ๊ดด๋์ด ๋น ์นธ์ด ๋๋ฉฐ, ์ธ์ ํ ๋ค ์นธ๋ ํจ๊ป ํ๊ดด๋๋ค. ์ฆ, ํญํ์ด ์๋ ์นธ์ด (i, j)์ธ ๊ฒฝ์ฐ์ (i+1, j), (i-1, j), (i, j+1), (i, j-1)๋ ํจ๊ป ํ๊ดด๋๋ค. ๋ง์ฝ, ํญํ์ด ํญ๋ฐํ์ ๋, ์ธ์ ํ ์นธ์ ํญํ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ธ์ ํ ํญํ์ ํญ๋ฐ ์์ด ํ๊ดด๋๋ค. ๋ฐ๋ผ์, ์ฐ์ ๋ฐ์์ ์๋ค.
๋ด๋ฒ๋งจ์ ํญํ์ ๋ฉด์ญ๋ ฅ์ ๊ฐ์ง๊ณ ์์ด์, ๊ฒฉ์ํ์ ๋ชจ๋ ์นธ์ ์์ ๋กญ๊ฒ ์ด๋ํ ์ ์๋ค. ๋ด๋ฒ๋งจ์ ๋ค์๊ณผ ๊ฐ์ด ํ๋ํ๋ค.
- ๊ฐ์ฅ ์ฒ์์ ๋ด๋ฒ๋งจ์ ์ผ๋ถ ์นธ์ ํญํ์ ์ค์นํด ๋๋๋ค. ๋ชจ๋ ํญํ์ด ์ค์น๋ ์๊ฐ์ ๊ฐ๋ค.
- ๋ค์ 1์ด ๋์ ๋ด๋ฒ๋งจ์ ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ค.
- ๋ค์ 1์ด ๋์ ํญํ์ด ์ค์น๋์ด ์์ง ์์ ๋ชจ๋ ์นธ์ ํญํ์ ์ค์นํ๋ค. ์ฆ, ๋ชจ๋ ์นธ์ ํญํ์ ๊ฐ์ง๊ณ ์๊ฒ ๋๋ค. ํญํ์ ๋ชจ๋ ๋์์ ์ค์นํ๋ค๊ณ ๊ฐ์ ํ๋ค.
- 1์ด๊ฐ ์ง๋ ํ์ 3์ด ์ ์ ์ค์น๋ ํญํ์ด ๋ชจ๋ ํญ๋ฐํ๋ค.
- 3๊ณผ 4๋ฅผ ๋ฐ๋ณตํ๋ค.
ํญํ์ ์ค์นํด๋์ ์ด๊ธฐ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, N์ด๊ฐ ํ๋ฅธ ํ์ ๊ฒฉ์ํ ์ํ๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ด๊ธฐ ์ํ๊ฐ ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋ณด์.
...
.O.
...
1์ด๊ฐ ์ง๋ ํ์๋ ์๋ฌด ์ผ๋ ๋ฒ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์, ์์ ๊ฐ๋ค๊ณ ๋ณผ ์ ์๋ค. 1์ด๊ฐ ๋ ํ๋ฅธ ํ์ ๊ฒฉ์ํ์ ์ํ๋ ์๋์ ๊ฐ์์ง๋ค.
OOO
OOO
OOO
1์ด๊ฐ ์ง๋ ํ์ ๊ฐ์ด๋ฐ์ ์๋ ํญํ์ด ํญ๋ฐํด ๊ฐ์ด๋ฐ ์นธ๊ณผ ์ธ์ ํ ๋ค ์นธ์ด ๋น ์นธ์ด ๋๋ค.
O.O
...
O.O
์ ๋ ฅ
์ฒซ์งธ ์ค์ R, C, N (1 ≤ R, C, N ≤ 200)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ R๊ฐ์ ์ค์ ๊ฒฉ์ํ์ ์ด๊ธฐ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๋น ์นธ์ '.'๋ก, ํญํ์ 'O'๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ด R๊ฐ์ ์ค์ N์ด๊ฐ ์ง๋ ํ์ ๊ฒฉ์ํ ์ํ๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
from collections import deque
R,C,N=map(int, sys.stdin.readline().strip().split(' '))
bomber=[list(sys.stdin.readline().strip()) for _ in range(R)]
bomber_queue=deque()
# ์ด๊ธฐ ์ํ์ ํญํ ์์น์ ์๊ฐ ์ ์ฅ
for i in range(R):
for j in range(C):
if bomber[i][j]=='O':
bomber_queue.append((i,j,0))
def install_bomber(time):
global bomber, bomber_queue
for i in range(R):
for j in range(C):
if bomber[i][j]=='.':
bomber[i][j]='O'
bomber_queue.append((i,j,time))
def boom(time):
global bomber, bomber_queue
directions=[(0,1),(1,0),(-1,0),(0,-1)]
# bomber_queue์ ์์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์กฐ๊ฑด ์ถ๊ฐํด์ผ ์ธ๋ฑ์ค ์๋ฌ ๋ฐ์ํ์ง ์์.
while bomber_queue and bomber_queue[0][2]==(time-3):
y,x,t=bomber_queue.popleft()
bomber[y][x]='.'
for dy, dx in directions:
newy=y+dy
newx=x+dx
if 0<=newy<R and 0<=newx<C and bomber[newy][newx]=='O':
bomber[newy][newx]='.'
# ์๋ก์ด bomber queue ์
๋ฐ์ดํธ
new_bomber_queue=deque()
while bomber_queue:
y,x,t=bomber_queue.popleft()
if bomber[y][x]=='O':
new_bomber_queue.append((y,x,t))
bomber_queue=new_bomber_queue.copy()
# ์ฒ์์ ํญํ ์ค์นํ๊ณ 1์ด๊ฐ ์๋ฌด๊ฒ๋ ์ํจ. 2์ด๋ถํฐ ํ๋
time=2
while time<=N:
# ํญํ์ด ์ค์น๋์ง ์์ ์นธ์ ํญํ ์ค์น
install_bomber(time)
# 1์ด๊ฐ ์ง๋ ํ 3์ด ์ ์ ์ค์น๋ ํญํ ๋ชจ๋ ํญ๋ฐ
time+=1
if time>N:
break
boom(time)
time+=1
for i in range(R):
for j in range(C):
print(bomber[i][j],end='')
print('')
์ด๊ธฐ ์ํ์์ ์ฒ์ 1์ด๊ฐ์ ์๋ฌด๊ฒ๋ ์ํ๊ธฐ ๋๋ฌธ์ 2์ด๋ถํฐ ํญํ์ ์ค์นํ๋ ๋ฑ์ ํ๋์ ํ๋ ๊ฒ์ผ๋ก ๋ณด๊ณ , time์ 2๋ก ์ด๊ธฐํํ๊ณ time์ด N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋์ while๋ฌธ์ ๋ฐ๋ณตํ๋๋ก ํ๋ค.
install_bomber(time) ํจ์์์ ์ ์ฒด bomber๋ฅผ ๋๋ฉด์ '.'์ ๊ฐ์ง๋ ์์น์ 'O'๋ก ๋ณ๊ฒฝํด์ฃผ๊ณ , ํญํ์ ์์น์ ํด๋น ํญํ์ ์ค์น ์๊ฐ์ ๊ธฐ๋กํ๋ bomber_queue์ ํญํ์ ์์น์ ํ์ฌ ์๊ฐ์ appendํ๋ค.
install_bomber() ํจ์๋ฅผ ์คํํ๋ ๋์ ์๊ฐ์ด 1์ด ์ง๋๊ธฐ ๋๋ฌธ์ time+=1 ํด์ค๋ค.
์ด๋ +1๋ time์ด N๋ณด๋ค ํด ์ ์๊ธฐ ๋๋ฌธ์ ์ค๊ฐ ์ ๊ฒ ๋ชฉ์ ์ผ๋ก if๋ฌธ์ ์ถ๊ฐํด์ time์ด N๋ณด๋ค ํฐ ๊ฒฝ์ฐ while๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
boom(time) ํจ์์์ bomber_queue์์ ํ์ฌ ์๊ฐ๋ณด๋ค 3์ด ์ ์ ์ค์น๋ ํญํ๋ค์ popleft ํด์ฃผ๋ฉด์ ํด๋น ์์น์ ํญํ๊ณผ ๊ฒฉ์ํ ๋ฒ์ ๋ด์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ํญํ๋ค์ ๋ชจ๋ ์ ๊ฑฐํด์ค๋ค.
*์ฌ๊ธฐ์ bomber_queue[0][2]==(time-3)์ผ ๋๊น์ง๋ง, while๋ฌธ์ ๋ฐ๋ณต == ํ์ฌ ์๊ฐ๋ณด๋ค 3์ด ์ ์ ํญํ์ด ์กด์ฌํ์ง ์์ ๋๊น์ง ๋ฐ๋ณต
*๋, while ์กฐ๊ฑด์ bomber_queue๋ฅผ ๋ฃ์ด์ค์ bomber_queue์ ์์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ง ํ์ํ๋๋ก ํ๋ค. ์ฒ์์ ์ด ๋ถ๋ถ์ ์๋ตํด์ 90%์์ ์ธ๋ฑ์ค ์๋ฌ๊ฐ ๋ฐ์ํ์๋ค.
์ดํ, ๊ธฐ์กด์ bomber_queue ์ค์์ ์ ๊ฑฐ๋ ํญํ์ ๋ฐ์ํ๊ธฐ ์ํด ํ์ ๊ธฐ๋ก๋ ์์น์์ bomber[][]=='O'์ธ ๊ฒฝ์ฐ์๋ง new_bomber_queue์ appendํด์ฃผ๊ณ , ๋ชจ๋ ํ๋ฅผ ํ์ํ๊ณ ๋๋ฉด bomber_queue๋ฅผ new_bomber_queue๋ก ๋ฎ์ด์์ด๋ค.
boom() ํจ์๋ฅผ ์คํํ๋ ๋์ ์๊ฐ์ด 1์ด ์ง๋๊ธฐ ๋๋ฌธ์ time+=1 ํด์ค๋ค.
time์ด N๋ณด๋ค ์ปค์ง๋ฉด bomber๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.
๋ค๋ฅธ ํ์ด๋ฅผ ์ฐพ์๋ณด๋, ํญํ์ ์์น๋ฅผ ๊ธฐ๋กํ bomber 2์ฐจ์ ๋ฐฐ์ด๊ณผ ๊ฐ ํญํ์ ์๊ฐ์ ๊ธฐ๋กํ time 2์ฐจ์ ๋ฐฐ์ด์ ๋๊ณ , ํ์ฌ ์๊ฐ๋ณด๋ค 3๋งํ ์์ ์๊ฐ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ ํญ๋ฐ์ํค๋ ํ์ด๋ฒ๋ ์์๋ค! ํ์ ๋ชจ๋ ์ ์ฅํ๊ณ ๋งค๋ฒ ์ ๋ฐ์ดํธํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ ์ธ ๋ฐฉ์์ธ ๊ฒ ๊ฐ๋ค.