동캄의 코딩도장

백준 2636 [치즈] 파이썬 본문

코테/BOJ

백준 2636 [치즈] 파이썬

동 캄 2022. 5. 24. 11:50

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

 

2636번: 치즈

아래 <그림 1>과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(<그림 1>에서 네모 칸에 X친 부분)에는 치즈가 놓

www.acmicpc.net

# 백준 2636 치즈
from collections import deque
import sys
input = sys.stdin.readline
dr = [0, 0, -1, 1]
dc = [1, -1, 0, 0]
N, M = map(int, input().split())
field = []
cheese_cnt = 0
for _ in range(N):
    s = list(map(int, input().split()))
    for val in s:
        if val == 1:
            cheese_cnt += 1
    field.append(s)


def bfs(start):
    start_r, start_c = start
    visited[start_r][start_c] = 1
    q = deque([])
    q.append((start_r, start_c))
    while q:
        curr_r, curr_c = q.popleft()
        for k in range(4):
            R = curr_r+dr[k]
            C = curr_c+dc[k]
            if 0 <= R < N and 0 <= C < M and visited[R][C] == 0:
                if field[R][C] == 1:
                    visited[R][C] = 1
                    del_lst.append((R, C))
                elif field[R][C] == 0:
                    visited[R][C] = 1
                    q.append((R, C))


cnt = 0
while True:
    if cheese_cnt == 0:
        break
    visited = [[0]*(M) for _ in range(N)]
    del_lst = []
    for i in range(N):
        if field[i][0] == 0 and visited[i][0] == 0:
            bfs((i, 0))
    for i in range(N):
        if field[i][M-1] == 0 and visited[i][M-1] == 0:
            bfs((i, M-1))
    for j in range(M):
        if field[0][j] == 0 and visited[0][j] == 0:
            bfs((0, j))
    for j in range(M):
        if field[N-1][j] == 0 and visited[N-1][j] == 0:
            bfs((N-1, j))

    del_cnt = len(del_lst)
    for del_pos in del_lst:
        r, c = del_pos
        field[r][c] = 0
    cheese_cnt -= del_cnt
    cnt += 1
print(cnt)
print(del_cnt)

bfs를 이용하여 해결하였다.

이 문제의 핵심은 빈 공간을 탐색하는 것이었다. (빈 공간을 탐색한 뒤, 벽을 만나면 벽의 좌표를 저장)

'코테 > BOJ' 카테고리의 다른 글

백준 1068 [트리] 파이썬  (0) 2022.09.02
백준 2251 [물통] 파이썬  (0) 2022.05.26
백준 2470 [두 용액] 파이썬  (0) 2022.05.24
백준 11758 [CCW] 파이썬  (0) 2022.05.20
백준 2589 [보물섬] 파이썬  (0) 2022.05.20