[프로그래머스] 프렌즈 4블록 (파이썬)

728x90
반응형

이미 터트린거 어떻게 지우나 했는데 이런 방법이 있어서 참고했다 똑똑한 사람이 많군

velog.io/@tjdud0123/%ED%94%84%EB%A0%8C%EC%A6%88-4%EB%B8%94%EB%A1%9D-2018-%EC%B9%B4%EC%B9%B4%EC%98%A4-%EA%B3%B5%EC%B1%84-python

 

b=list(map(list,zip(*board)) 이렇게 하면 세로 줄에 해당하는 아이템을 행으로 해서 새로운 배열로 리턴해준다 

지워진 만큼 앞에 '_'을 붙여서 남은 것 끼리 오른쪽으로 모아준다 

def pop_num(b, m, n):
    pop_set = set()
# n,m 방향 주의 
    for i in range(1, n):
        for j in range(1, m):
            if b[i][j] == b[i - 1][j - 1] == b[i - 1][j] == b[i][j - 1] != '_':
                pop_set |= set([(i, j), (i - 1, j - 1), (i - 1, j), (i, j - 1)])
    # set_board
    for i, j in pop_set:
        b[i][j] = 0
    for i, row in enumerate(b):
        empty = ['_'] * row.count(0) # 지워진 개수만큼 앞에 '_' 붙여주면 0아닌 것 끼리 모인다
        b[i] = empty + [block for block in row if block != 0] # 0아닌 것 끼리 모아주기
    return len(pop_set)


def solution(m, n, board):
    count = 0
    b = list(map(list, zip(*board)))  # 행열 바꿔치기
    while True:
        pop = pop_num(b, m, n)
        if pop == 0: return count # 바뀐 것이 없으면 끝 
        count += pop

 

728x90
반응형
TAGS.

Comments