[python] 2638번 치즈

ideal dev·2022년 12월 2일
0

코딩테스트

목록 보기
5/69

1. 문제 링크 및 문제

1-1 문제 요약

: '1' 주변에 '0'이 2개 이상 있을 때 0으로 만들어야 함.
추가조건 0이 1 내부에 둘러쌓여 있을 때 제외

2. 해결 방법 생각해보자 ...

  1. (0,0)에서 BFS 시작, 1을 만나면 해당 좌표에 +1 을 한다.
  2. 배열에서 3 이상인 값은 0으로 만들고(2변 이상 실내온도의 공기와 접촉), 2인 값은 1로 만들어준 후 BFS 실행
  3. 배열 전체가 0 이 될 때 까지 이 과정을 반복한다.

3. 코드

from collections import deque

N,M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
dx, dy = [-1,0,1,0],[0,1,0,-1]
count = 0

def FindCheese(x,y):
    q = deque()
    q.append((x,y))
    ch = [[-1]*M for i in range(N)]
    ch[x][y] = 0

    while q :
        x,y = q.popleft()
        for i in range(4):
            xx,yy = x+dx[i],y+dy[i]
            if xx<0 or xx>=N or yy<0 or yy>=M or ch[xx][yy] != -1: continue
            if arr[xx][yy] >= 1 :
                arr[xx][yy] += 1

            else :
                ch[xx][yy] = 0
                q.append((xx,yy))

while True :
    FindCheese(0,0)
    melt = False

    for x in range(N):
        for y in range(M):
            if arr[x][y] >= 3 :
                arr[x][y] = 0
                melt = True
            elif arr[x][y] == 2 :
                arr[x][y] = 1
    
    if melt :
        count += 1
    else :
        break
            
print(count)

!

어렵다어렵다 @_@ 꼭 다시 풀어보기 !
조건을 정확하게 예외없이 코드를 짜야하는데, 일단 BFS 만들면 무한루프 돌면서 시작이다... ㅋㅋㅋ
문제 더 더 더 많이 풀어보고, 풀어본 문제는 확실히 내 것으로 만들어야지.~~
그래도 전보다 훨씬 잘풀리고 방향도 잡아갈 수 있어서 너무 재밌당 ㅎㅎㅎ

0개의 댓글