https://school.programmers.co.kr/learn/courses/30/lessons/17679/
M=0
N=0
def deleteBlocks(board, set_res):
set_res = list(set_res)
for s in set_res:
board[s[0]][s[1]] = 'o'
for i in range(N):
board[i] = list(filter(lambda x : x != 'o',board[i]))
for i in range(N):
while len(board[i]) < M:
board[i].insert(0, 'o')
return board
def findBlocks(board):
res = set()
for i in range(N-1):
for j in range(M-1):
flag = board[i][j]
if flag != 'o' and flag == board[i+1][j] and flag == board[i][j+1] and flag == board[i+1][j+1]:
res.add((i,j))
res.add((i+1,j))
res.add((i,j+1))
res.add((i+1,j+1))
return res
def solution(m, n, board):
answer = 0
global M
global N
M = m
N = n
board = [[board[i][j] for i in range(m)] for j in range(n)]
set_res = findBlocks(board)
answer += len(set_res) # set 결과 return
while len(set_res) != 0:
### delete blocks
board = deleteBlocks(board, set_res)
### update board
set_res = findBlocks(board)
answer += len(set_res)
# print(board)
return answer
def pang(m, n, board):
t_board = []
for x in range(m):
t_board.append([])
for y in range(n):
t_board[x].append(board[x][y])
flag = False
for x in range(m-1):
for y in range(n-1):
if len(set([board[x][y], board[x][y+1], board[x+1][y], board[x+1][y+1]])) == 1:
if board[x][y] != '0':
flag = True
t_board[x][y] = '0'
t_board[x][y+1] = '0'
t_board[x+1][y] = '0'
t_board[x+1][y+1] = '0'
return flag, t_board
def restruct(m, n, board):
re_board = [''] * m
for x in range(n):
ys = ''.join([board[y][x] for y in range(m)]).replace('0','').zfill(m)
for y in range(m):
re_board[y] += ys[y]
return re_board
def get_num(m, n, board):
cnt = 0
for x in range(m):
for y in range(n):
if board[x][y] == '0':
cnt += 1
return cnt
def solution(m, n, board):
flag = True
while flag:
flag, board = pang(m, n, board)
board = restruct(m, n, board)
return get_num(m, n, board)