def solution(m, n, b):
answer = 0
xy = set()
board = [list(line) for line in b]
while True:
for i in range(m-1):
for j in range(n-1):
cur = board[i][j]
if cur == ' ':
continue
if board[i][j+1] == board[i+1][j] == board[i+1][j+1] == cur:
xy.add((i,j))
xy.add((i, j+1))
xy.add((i+1, j))
xy.add((i+1, j+1))
answer += len(xy)
if len(xy) == 0:
break
for ab in xy:
x = ab[0]
y = ab[1]
board[x][y] = ' '
xy.clear()
# print(board)
# print()
for i in range(m-1, -1, -1):
for j in range(n):
curx, cury = i, j
while curx+1 < m and board[curx+1][cury] == ' ':
board[curx+1][cury] = board[curx][cury]
board[curx][cury] = ' '
curx += 1
# print(board)
return answer
처음에 테스트 케이스 5번 10번이 통과가 안되서 질문하기에서 찾은 반례
6 6 ["AABBEE", "AAAEEE", "VAAEEV", "AABBEE", "AACCEE", "VVCCEE"]
답: 32
for i in range(m):
for j in range(n):
curx, cury = i, j
while curx+1 < m and board[curx+1][cury] == ' ':
board[curx+1][cury] = board[curx][cury]
board[curx][cury] = ' '
curx += 1
블록이 지워진 후에 위에 있는 블록을 아래로 떨어지게 할 때 이렇게 위에서부터 해서 틀렸었다.