본문 바로가기

Develop/코딩인터뷰

[코딩인터뷰] 백준 2638번

반응형

백준 2638번
백준 2638번

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
반응형