[1차] 프렌즈4블록

발자·2023년 6월 9일
0

programmers

목록 보기
33/34

문제

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

0개의 댓글