์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 16918 ๐Ÿฅˆ] ๋ด„๋ฒ„๋งจ

1eehyunji 2023. 7. 10. 00:49

๋ฌธ์ œ

๋ด„๋ฒ„๋งจ์€ ํฌ๊ธฐ๊ฐ€ 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๋งŒํ‹ˆ ์ž‘์€ ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ ํญ๋ฐœ์‹œํ‚ค๋Š” ํ’€์ด๋ฒ•๋„ ์žˆ์—ˆ๋‹ค! ํ์— ๋ชจ๋‘ ์ €์žฅํ•˜๊ณ  ๋งค๋ฒˆ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฐฉ์‹์ธ ๊ฒƒ ๊ฐ™๋‹ค.