반응형
from collections import deque
# 5 <= N, M <= 100
N, M = map(int, input().split())
# 네변 중 두변이 공기면 1시간 안에 녹는다
table = []
for _ in range(N):
table.append(list(map(int, input().split())))
dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]
answer = 0
# 0 = 미방문 / 1 = 방문 / 2 = 카운팅 / 3 = 제거
enum = (1, 2, 3)
while True:
queue = deque()
queue.append((0,0))
counter = [[0] * M for _ in range(N)]
counter[0][0] = 1
while 0 < len(queue):
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < N and 0 <= ny < M:
if table[nx][ny] == 0:
if counter[nx][ny] == 0:
queue.append((nx, ny))
counter[nx][ny] = 1
elif table[nx][ny] == 1:
if counter[nx][ny] == 0:
counter[nx][ny] = 2
elif counter[nx][ny] == 2:
counter[nx][ny] = 3
is_found = False
for i in range(N):
for j in range(M):
if counter[i][j] == 3:
table[i][j] = 0
is_found = True
if not is_found:
print(answer)
break
answer += 1
테스트
5 5
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
출력: 0
5 5
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
출력: 1
5 5
0 0 0 0 0
0 1 1 1 0
0 1 0 1 0
0 1 1 1 0
0 0 0 0 0
출력: 2
5 5
0 0 0 0 0
0 0 1 0 0
0 1 0 1 0
0 0 1 0 0
0 0 0 0 0
출력: 1
5 5
0 0 0 0 0
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0
출력: 3
3 10
0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 1 1 1 0
0 0 0 0 0 0 0 0 0 0
출력: 1
8 8
0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0
출력: 5
반응형
'Develop > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰] 알고리즘 시간 복잡도 분석 방법 (0) | 2021.03.23 |
---|---|
[코딩인터뷰] 깊이 우선 탐색 Depth first search (DFS) (0) | 2021.03.23 |
[코딩인터뷰] 백준 2146번 (0) | 2021.03.22 |
[코딩인터뷰] 백준 16236번 (0) | 2021.03.21 |
[코딩인터뷰] 백준 14502번 (0) | 2021.03.21 |
꾸준히 노력하는 개발자 "김예건" 입니다.