๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 16918 ๋ด„๋ฒ„๋งจ (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2024. 3. 23. 20:04
 

16918๋ฒˆ: ๋ด„๋ฒ„๋งจ

์ฒซ์งธ ์ค„์— R, C, N (1 ≤ R, C, N ≤ 200)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ R๊ฐœ์˜ ์ค„์— ๊ฒฉ์žํŒ์˜ ์ดˆ๊ธฐ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋นˆ ์นธ์€ '.'๋กœ, ํญํƒ„์€ 'O'๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


 

 

BFS๋Š๋‚Œ์˜ ๊ตฌํ˜„ ๋ฌธ์ œ


์•„์ด๋””์–ด

ํญํƒ„์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ„ฐํŠธ๋ฆฌ๋Š” ๊ณผ์ •์—์„œ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธํ•  ๊ฑฐ ๊ฐ™์•„ deque๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

1์ดˆ๋งˆ๋‹ค ์–ด๋–ป๊ฒŒ ๊ฒฉ์žํŒ์˜ ๋ณ€ํ•˜๋Š”์ง€ ์ƒ๊ฐํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.


์ „์ฒด ์ฝ”๋“œ

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))

์ฝ”๋“œ ์„ค๋ช…

for i in range(R):
    row = list(input())
    for j in range(C):
        if row[j] == 'O': # ์ฒ˜์Œ ํญํƒ„ ์ขŒํ‘œ๋“ค ์ €์žฅ
            boomList.append([i, j])
    grid.append(row)

๊ฐ€์žฅ ์ฒ˜์Œ์— ์žˆ๋˜ ํญํƒ„๋“ค์˜ ์ขŒํ‘œ๋ฅผ boomList์— ์ €์žฅํ•ด๋‘”๋‹ค. 

 

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

 

์‹œ๊ฐ„์ด N์ดˆ๊ฐ€ ๋ ๋•Œ๊นŒ์ง€ ๋ฌธ์ œ์—์„œ ์ œ์‹œํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด ์ค€๋‹ค. 

1. ๋นˆ๊ณณ์— ํญํƒ„์„ ์ฑ„์›Œ์ค€๋‹ค.

2. 1์ดˆ ๊ฒฝ๊ณผ, ์‹œ๊ฐ„์ด N์ดˆ๊ฐ€ ๋˜๋ฉด break

3. boomList์— ์žˆ๋Š” ํญํƒ„๋“ค๋งŒ ํ„ฐํŠธ๋ ค์ค€๋‹ค. 

4. ํญํƒ„์ด ํ„ฐ์ง€๊ณ , ๋‚จ์•„์žˆ๋Š” ํญํƒ„๋“ค๋งŒ boomList์— ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค. 

5. 1์ดˆ ๊ฒฝ๊ณผ.