[BaekJoon] 백준 2638번 치즈
🎈문제
https://www.acmicpc.net/problem/2638
💬설명
- bfs로 풀었다.
- 과정
- bfs를 이용해 [0, 0]부터 시작해서 (치즈 내부에 있지 않은) 모든 빈공간을 탐색한다. 이때 치즈가 있는 곳의 좌표를 마주칠 때마다 개수를 카운트 해놓는다.
- 카운트 해놓은 개수로 2 이상인 치즈는 지운다.
- 1-2를 반복하고 만약 치즈가 다 녹아 없어진 경우 횟수를 출력한다.
👩💻코드
# BaekJoon2638.py
from collections import deque
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def check_cheeze_left():
global arr
for ls in arr:
for l in ls:
if l == 1:
return True
return False
def check_cheeze():
global N, M, dx, dy, arr
melting = [[0 for _ in range(M)] for _ in range(N)]
visited = [[False for _ in range(M)] for _ in range(N)]
queue = deque([[0, 0]])
visited[0][0] = True
while queue:
value = queue.popleft()
for i in range(4):
nx = value[0] + dx[i]
ny = value[1] + dy[i]
if nx < 0 or ny < 0 or nx >= N or ny >= M:
continue
if visited[nx][ny]:
continue
if arr[nx][ny] == 1:
melting[nx][ny] += 1
continue
visited[nx][ny] = True
queue.append([nx, ny])
return melting
def delete_cheeze(cheezes):
global arr, N, M
for i in range(N):
for j in range(M):
if cheezes[i][j] >= 2:
arr[i][j] = 0
def solution():
result = 0
while check_cheeze_left():
delete_cheeze(check_cheeze())
result += 1
print(result)
solution()
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[Programmers] 성격 유형 검사하기 - Python (0) | 2022.09.18 |
---|---|
[Programmers] 행렬 테두리 회전하기 (0) | 2021.11.04 |
[BaekJoon] 백준 10159번 저울 (0) | 2021.11.04 |
[BaekJoon] 백준 11909번 배열 탈출 (0) | 2021.11.04 |
[BaekJoon] 백준 13913번 숨바꼭질4 (0) | 2021.10.28 |