알고리즘/BOJ
[Python] 백준 2638: 치즈
PIAI
2021. 9. 16. 13:56
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