https://www.codetree.ai/missions/2/problems/glacier/description
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split(" "))
graph = []
queue = deque()
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
for _ in range(n):
temp = list(map(int, input().split()))
graph.append(temp)
### 구현부
def bfs(visited, start_x, start_y):
# visited = [[0 for _ in range(m)] for _ in range(n)]
queue.append((start_x, start_y))
visited[start_x][start_y] = 1
while queue:
x, y = queue.popleft()
visited[x][y] = 1
# print(x, y)
for i in range(4):
nx = x + dx[i]
ny = y+ dy[i]
if 0<= nx and nx < n and 0<= ny and ny < m:
if graph[nx][ny] == 0 and visited[nx][ny] == 0:
queue.append((nx, ny))
visited[nx][ny] = 1
def canMelt(visited, x, y):
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if visited[nx][ny] == 1:
return True
return False
def stop():
for i in range(n):
for j in range(m):
if graph[i][j] == 1:
return False
return True
ice = []
while True:
visited = [[0 for _ in range(m)] for _ in range(n)]
# 녹일 위치의 바깥 체크
bfs(visited, 0, 0)
# 녹일 위치에서 녹일 수 있는지 확인
cnt = 0
for i in range(n):
for j in range(m):
if visited[i][j] == 0:
if canMelt(visited, i, j):
graph[i][j] = 0
cnt += 1
ice.append(cnt)
if stop():
print(len(ice), ice[-1])
break
728x90
반응형
'🔻PS > Codetree' 카테고리의 다른 글
[Codetree] 아름다운 수 Python (1) | 2024.09.05 |
---|---|
[Codetree] 숫자가 더 큰 인접한 곳으로 이동 Python (0) | 2024.09.02 |
[Codetree] 큰 숫자만 계속 고르기 Python (0) | 2024.08.09 |
[Codetree] 정수 명령 처리 6 Python (0) | 2024.08.09 |
[Codetree] 가장 많은 데이터 Python (0) | 2024.08.08 |