본문 바로가기
Programming/Programmers

[프로그래머스] 프렌즈4블록(Python)

by 데이터현 2021. 11. 2.

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

 

코딩테스트 연습 - [1차] 프렌즈4블록

프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙

programmers.co.kr

주어진 조건대로 구현하면 된다.

나는 set으로 중복을 방지하고, 블록이 내려오는 것은

제거할 블록을 x 순으로 오름차순 정렬한 후 제거할 블록부터 맨 위칸까지 한 칸씩 모두 훑는 방식으로 구현했다.

 

나의 코드

def solution(m, n, board):
    answer = 0
    check = True
    for i in range(m):
        board[i] = list(board[i])
    while check:
        delete = set()
        check = False
        for x in range(m):
            for y in range(n):
                target = board[x][y]
                if 0<= x+1 <m and 0<= y+1 <n:
                    if (target == board[x][y+1] == board[x+1][y] == board[x+1][y+1]) and target !='X':
                        delete.update([(x,y)],[(x,y+1)],[(x+1,y)],[(x+1,y+1)])
                        check = True
        delete = sorted(list(delete),key = lambda x: x[0])
        for d in delete:
            x, y = d
            for i in range(x,-1,-1):
                if i!=0:
                    board[i][y] = board[i-1][y]
                else:
                    board[i][y] = 'X'
        answer += len(delete)
    return answer

 

댓글