def bfs(x,y,color): global puyo,visited,arr temp = [[x,y]] stack = [[x,y]] while stack: sx,sy = stack.pop(0) for i in range(4): nx = sx + dx[i] ny = sy + dy[i] if 0<= nx < 12 and 0 <= ny <6: if arr[nx][ny] == color and visited[nx][ny]: visited[nx][ny] = 0 stack.append([nx,ny]) temp.append([nx,ny]) if len(temp) >= 4: return temp else: return [] arr = [list(input()) for _ in range(12)] times = 0 dx = [-1,1,0,0] dy = [0,0,-1,1] while True: visited= [[1]*6 for _ in range(12)] puyo = [] for x in range(12): for y in range(6): if arr[x][y] != '.' and visited[x][y]: visited[x][y] = 0 check = bfs(x,y,arr[x][y]) if check: for x,y in check: puyo.append((x,y)) for x,y in puyo: arr[x][y] = '.' if len(puyo) == 0: break new_arr = [['.']*6 for _ in range(12)] for y in range(6): temp = [] for x in range(11,-1,-1): if arr[x][y] != '.': temp.append(arr[x][y]) for i in range(len(temp)): new_arr[11-i][y] = temp[i] arr = [row[:] for row in new_arr] times += 1 print(times)
이 문제는 한단계씩 BFS를 돌려서 이어진 뿌요를 찾고, 그 뿌요가 하나도 없으면 멈추면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 17471 게리멘더링 (0) | 2021.01.12 |
---|---|
[BOJ] 14500 테트로미노 (0) | 2021.01.12 |
[BOJ] 3055 탈출 (0) | 2021.01.11 |
[BOJ] 12907 동물원 (0) | 2021.01.11 |
[BOJ] 17472 다리 만들기 2 (0) | 2021.01.10 |