[programmers/py] [1차] 프렌즈4블록

승민·2024년 3월 6일

알고리즘

목록 보기
66/171

[1차] 프렌즈4블록

https://school.programmers.co.kr/learn/courses/30/lessons/17679

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/17679

풀이

지울 수 있는 블록을 추가, 삭제, 내림

def solution(m, n, board):
    answer = 0
    board = [ list(b) for b in board]
    
    while True:
        remove = []
        # 블록 4개가 동일한 경우를 찾는다
        for i in range(m-1):
            for j in range(n-1):
                if (
                    board[i][j] != "" and
                    board[i+1][j] == board[i][j] and
                    board[i][j+1] == board[i][j] and
                    board[i+1][j+1] == board[i][j]
                ) :
                    remove.append([i,j])
        
        if len(remove) == 0 :
            break
        
        # 지운다
        for x,y in remove:
            if board[x][y] != "" : 
                board[x][y] = ""
                answer += 1
            if board[x+1][y] != "":
                board[x+1][y] = ""
                answer += 1
            if board[x][y+1] != "":
                board[x][y+1] = ""
                answer += 1
            if board[x+1][y+1] != "":
                board[x+1][y+1] = ""
                answer += 1
    
        # 내린다.
        for j in range(n):
            idx = 0
            for i in range(m-1, -1, -1):
                if board[i][j] == "":
                    idx +=1
                elif board[i][j] != "" and idx > 0 :
                    board[i+idx][j] = board[i][j]
                    board[i][j] = ""
    
    return answer

0개의 댓글