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