๋ฌธ์ ์์ฝ
์ธ๋ถ ๊ณต๊ธฐ๋ ๋ ๋ฉด ์ด์ ๋ง๋ฟ์ผ๋ฉด ์น์ฆ๊ฐ ๋ น์. ๋ด๋ถ์ ๊ฐํ ๊ณต๊ธฐ๋ ์ธ๋ถ ๊ณต๊ธฐ ์ทจ๊ธ ์ ํจ. ์น์ฆ ๋ค ์์ด์ง ๋๊น์ง ์๊ฐ ์ธ์ ์ถ๋ ฅํ๋ฉด ๋์.
์ธ๋ถ ๊ณต๊ธฐ ๊ตฌ๋ถ
๋งค ๋ผ์ด๋๋ง๋ค (0,0)์์ BFS ๋๋ ค์ ์ธ๋ถ ๊ณต๊ธฐ๋ง True๋ก ๋งํนํด๋ฌ์ผ ํจ. ๋ด๋ถ์ ๊ฐํ 0๊น์ง ์ธ๋ถ๋ก ์ณค๋ค๊ฐ ๋ฐ๋ก ์ค๋ตํ.
์น์ฆ ๋ น์ด๊ธฐ ๋ก์ง
๊ทธ๋ฆฌ๋ ์ ์ฒด ์ํํ๋ฉด์ ์น์ฆ(1) ๋ง๋๋ฉด ์ฌ๋ฐฉ ๋ค ํ์ธํด์ ์ธ๋ถ๊ณต๊ธฐ๋ ๋ฟ๋ ๋ฉด ๋ช ๊ฐ์ธ์ง ์ธ๋ผ. ๋ ๊ฐ ์ด์์ด๋ฉด ๊ทธ ์นธ ์ด๋ฒ ๋ผ์ด๋์์ ๋ฐ๋ก ๋ น์ธ๋ค. ๊ทธ ์ธ์๋ ์ ๊ฒฝ ๊บผ๋ ๋จ.
๋ฐ๋ณต & ์ข ๋ฃ
ํ ๋ฒ ๋๋ฆด ๋๋ง๋ค ์๊ฐ+1 ํ๊ณ , ์น์ฆ ๋ค ์ฌ๋ผ์ง๋ฉด ๊ทธ๋ while๋ฌธ ๋๋ด๊ณ ์๊ฐ๋ง ์ถ๋ ฅํ๋ฉด ๋จ. for๋ฌธ ์ค๊ฐ์ break, else ์ฐ๋ฉด ์ํ ๊ผฌ์ด๋๊น ๊ทธ๋ฐ ๊ฑฐ ์ฐ์ง ๋ง๊ณ ๋ค ๋ฐฉํฅ ๋ค ํ์ธํ ๋ค์ ์ฒ๋ฆฌํ๊ธฐ.
BFS์ฌ์ ์์ด๋์ด ์์ฒด๋ ์ด๋ ต์ง ์์๋ ๋ฌธ์ . ๊ตฌํ์ด ๊ท์ฐฎ์์.
# bfs: ์ธ๋ถ๊ณต๊ธฐ ๋ผ์ด๋๋ง๋ค ํ๋ณํ๊ธฐ
from collections import deque
import sys
input=sys.stdin.readline
# ๋งค ๋ผ์ด๋๋ง๋ค ์ธ๋ถ ๊ณต๊ธฐ์ธ์ง, ๋ด๋ถ ๊ณต๊ธฐ์ธ์ง๋ฅผ ํ๋ณํฉ๋๋ค.
def bfs_outer_air(grid):
start_y,start_x=0,0
directions=[(0,1),(-1,0),(0,-1),(1,0)]
row=len(grid)
col=len(grid[0])
outer_air=[[False]*col for _ in range(row)]
outer_air[start_y][start_x]=True
q=deque()
q.append((start_y,start_x))
while q:
cy,cx=q.popleft()
for dy,dx in directions:
ny=cy+dy
nx=cx+dx
if 0<=ny<row and 0<=nx<col:
if outer_air[ny][nx]==False and grid[ny][nx]!=1:
outer_air[ny][nx]=True
q.append((ny,nx))
return outer_air
# ๊ทธ๋ฆฌ๋๊ฐ ๋น์๋์ง ํ๋ณํฉ๋๋ค.
def is_empty_grid(grid):
for row in grid:
for block in row:
if block==1:
return False
return True
# ์ต์ข
์๊ฐ ๊ณ์ฐ
def cal_total_time(grid,n,m):
dirs=[(0,1),(-1,0),(0,-1),(1,0)]
total_time=0
while True:
if is_empty_grid(grid):
break
outer_air=bfs_outer_air(grid)
new_grid=[row[:] for row in grid] #deepcopy
for i in range(n):
for j in range(m):
if grid[i][j]==1:
cnt=0
for di,dj in dirs:
ni,nj=i+di,j+dj
if 0<=ni<n and 0<=nj<m:
if grid[ni][nj]==0 and outer_air[ni][nj]:
cnt+=1
if cnt>=2:
new_grid[i][j]=0
total_time+=1
grid=[row[:] for row in new_grid]
return total_time
def main():
n,m=map(int,input().split())
grid=[list(map(int,input().split())) for _ in range(n)]
print(cal_total_time(grid,n,m))
if __name__=="__main__":
main()'๐ Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| โ BOJ 16236 - BFS (0) | 2025.07.20 |
|---|---|
| โ BOJ 11779 - dijkstra + ๊ฒฝ๋ก ์ถ์ (0) | 2025.07.18 |
| โ BOJ 14938 - N๋ฒ ๋ค์ต์คํธ๋ผ (1) | 2025.07.16 |
| โ BOJ 30805 - LCS(Longest Common Subsequence) (0) | 2025.07.15 |
| โ BOJ 13172 - pow ์ฐ์ฐ (๋ถํ ์ ๋ณต ๊ฑฐ๋ญ์ ๊ณฑ, ๋ชจ๋๋ฌ ์ญ์) (1) | 2025.07.14 |