본문 바로가기
알고리즘/BOJ

[Python] 백준 2638: 치즈

by PIAI 2021. 9. 16.

https://www.acmicpc.net/problem/2638

 

2638번: 치즈

첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로

www.acmicpc.net

1. 공기와 접촉하면 천천히 녹는다. 내부에 있는 공간은 접촉하지 않는 것으로 가정한다. 이 의미에 힌트가있다. 

2. 내부에 있는 공간은 접촉하지 않으므로 외부에서부터 BFS로 진행해줘서 2번이상 접촉을하면 다음 반복문에서 제외시켜주면된다.

3. 마지막으로 전체가 0 일시 무한루프 탈출해준다.

 

from collections import deque

n, m = map(int, input().split())
cheeze = [list(map(int, input().split())) for _ in range(n)]
dx, dy = [0, 0, 1, -1], [1, -1, 0, 0]
ans = 0
while True:
    queue = deque()
    ch = [[0 for _ in range(m)] for _ in range(n)]
    ch[0][0] = 1
    queue.append([0, 0])
    while queue:
        x, y = queue.popleft()
        for k in range(4):
            nx, ny = x+dx[k], y+dy[k]
            if 0 <= nx < n and 0 <= ny < m and not ch[nx][ny]:
                if cheeze[nx][ny]:
                    cheeze[nx][ny] += 1
                else:
                    ch[nx][ny] = 1
                    queue.append([nx, ny])

    flag = 0
    for i in range(n):
        for j in range(m):
            if cheeze[i][j] >= 3:
                cheeze[i][j] = 0
            elif 0 < cheeze[i][j]:
                flag = 1
                cheeze[i][j] = 1
    ans += 1

    if not flag:
        print(ans)
        break

댓글