def solution(m, n, board):
# 각 원소 리스트로 변환
for x in range(m):
board[x] = [y for y in board[x]]
# 삭제할 위치
rm = set()
# 삭제한 갯수
cnt = 0
# 지워질 블록 찾기
while True:
for x in range(m-1):
for y in range(n-1):
tmp = board[x][y]
# 이미 지워진 블록을 만나면 지나가기
if tmp == '':
continue
# 오른쪽, 아래, 오른쪽 대각선이 모두 같을 때
if board[x][y+1] == tmp and board[x+1][y] == tmp and board[x+1][y+1] == tmp:
rm.add((x, y))
rm.add((x, y+1))
rm.add((x+1, y))
rm.add((x+1, y+1))
# 없으면 그만
if len(rm) == 0:
break
# 갯수에 합산
cnt += len(rm)
# 지우기
for x, y in rm:
board[x][y] = ''
# 초기화
rm = set()
# 아래로 내리기
while True:
# 움직인 갯수
moved = 0
for x in range(m-1):
for y in range(n):
# 위에는 값이 존재하고, 아래는 값이 존재하지 않을 때
if board[x][y] != '' and board[x+1][y] == '':
board[x+1][y] = board[x][y]
board[x][y] = ''
moved += 1
# 움직인 블록이 없으면 그만
if moved == 0:
break
return cnt