[알고리즘/프로그래머스] - 프렌즈4블록(python)

유현민·2022년 6월 14일
0

알고리즘

목록 보기
209/253

문제

구현문제이다.
1. 전체를 돌면서 위 아래 대각선이 같은걸 찾는다.
2. 찾은 위치를 1로 바꾼다.
3. 1의 갯수를 센다.
4. 맨 밑 부터 탐색하며 만약 1이면 위에를 내려준다.
5. while을 사용하여 1이 아닐때 까지 감소시키고
6. 바꿔준다.

def solution(m, n, board):
    answer = 0
    board = list(map(list, board))

    while True:
        visited = [[0] * n for _ in range(m)]
        for i in range(m - 1):
            for j in range(n - 1):
                k = board[i][j]
                if k != 0:
                    if board[i][j + 1] == k and board[i + 1][j] == k and board[i + 1][j + 1] == k:
                        visited[i][j], visited[i + 1][j], visited[i][j + 1], visited[i + 1][j + 1] = 1, 1, 1, 1

        cnt = 0
        for i in range(m):
            cnt += sum(visited[i])
        if not cnt:
            break
        answer += cnt
        for i in range(m - 1, -1, -1):
            for j in range(n):
                if visited[i][j]:
                    x = i - 1
                    while x >= 0 and visited[x][j] == 1:
                        x -= 1
                    if x < 0:
                        board[i][j] = 0
                    else:
                        board[i][j] = board[x][j]
                        visited[x][j] = 1

    return answer
profile
smilegate megaport infra

0개의 댓글