Algorithm
[백준][Python]2638 치즈
soduddl1
2023. 3. 8. 23:27
문제
https://www.acmicpc.net/problem/2638
소스코드
if __name__ == "__main__":
n,m = map(int,input().split())
ch = [list(map(int,input().split())) for _ in range(n)]
dx = [1,-1,0,0]
dy = [0,0,1,-1]
time = 0
while 1:
q = deque()
q.append([0,0])
visited = [[0]*m for _ in range(n)]
visited[0][0] = 1
while q:
x,y = q.popleft()
for k in range(4):
xx = x + dx[k]
yy = y + dy[k]
if 0<=xx<n and 0<=yy<m:
if ch[xx][yy] >= 1:
ch[xx][yy] +=1
else:
if not visited[xx][yy]:
visited[xx][yy] = 1
q.append([xx,yy])
flag = True
for i in range(n):
for j in range(m):
if ch[i][j] >= 3:
ch[i][j] = 0
flag = False
elif ch[i][j] >= 2:
ch[i][j] = 1
if flag:
break
time +=1
print(time)
설명
1. 공기면에 닿아서 녹는 치즈 확인
bfs 이용해서 공기들을 체크해주기
한번 체크한 공기는 다시는 체크하지 않도록 방문기록 저장
(치즈는 탐색할 대상에 넣지않음)
녹는 치즈를 체크해주기
2. 녹는 치즈들 한번에 삭제함
삭제할 치즈가 없다면 종료
3. 시간 + 1