📖  문제

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

 

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

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

programmers.co.kr

 

💻  코드

import copy
from collections import deque


def pop(m, n, board):
    new_board = copy.deepcopy(board)
    isFinished = True
    for r in range(m - 1):
        for c in range(n - 1):
            if board[r][c] == board[r + 1][c] == board[r][c + 1] == board[r + 1][c + 1] != 0:
                new_board[r][c] = new_board[r + 1][c] = new_board[r][c + 1] = new_board[r + 1][c + 1] = 0
                isFinished = False
    return new_board, isFinished


def fill_blank(m, n, b):
    dq = deque()
    for c in range(n):
        for r in range(m):
            if b[r][c] != 0:
                dq.append(b[r][c])
        for _ in range(m - len(dq)):
            dq.appendleft(0)
        for r in range(m):
            b[r][c] = dq[r]
        dq.clear()
    return b


def solution(m, n, board):
    b = [list(row) for row in board]
    while True:
        b, isFinished = pop(m, n, b)
        if isFinished:
            return sum(row.count(0) for row in b)
        b = fill_blank(m, n, b)

 

🙌  한마디

문제의 요구사항에 알맞게 구현하면 되는 문제였다. 그러나 테스트 케이스 7번만 통과가 되지 않아 코드를 검토하는데 시간이 걸렸다.

            for r in range(m):
                for c in range(m):

알고보니 n을 m으로 타이핑했다. 이런 허무한 실수는 빨리 발견할 수 있도록 실수 노트를 만들어야겠다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기