프렌즈4블록

jiholee·2022년 6월 1일
0

알고리즘

목록 보기
17/20
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

블록이 지워진 후에 위에 있는 블록을 아래로 떨어지게 할 때 이렇게 위에서부터 해서 틀렸었다.

0개의 댓글