코딩테스트

[프로그래머스][KAKAO_BLIND][2018] 프렌즈4블록

pythaac 2021. 9. 1. 06:54
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

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

 

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

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

programmers.co.kr

 

내가 작성한 코드

def is_square(board, i, j, m, n):
    return i+1 < m and j+1 < n and board[i][j] == board[i+1][j] == board[i][j+1] == board[i+1][j+1]

def make_x(board, to_x):
    cnt = 0
    idx = [(0,0), (1,0), (0,1), (1,1)]
    for i, j in to_x:
        for d in idx:
            if board[i+d[0]][j+d[1]] != 'x':
                board[i+d[0]][j+d[1]] = 'x'
                cnt += 1
    return cnt

def down(board, m, n):
    for j in range(n):
        stk = []
        for i in range(m):
            if board[i][j] != 'x':
                stk.append(board[i][j])
        for i in range(m-1, -1, -1):
            if not stk:
                board[i][j] = 'x'
            else:
                board[i][j] = stk.pop()


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

    crnt = -1
    while crnt != 0:
        crnt = 0
        to_x = []
        for i in range(m):
            for j in range(n):
                if is_square(board, i, j, m, n):
                    to_x.append((i,j))
        crnt = make_x(board, to_x)
        answer += crnt
        down(board, m, n)

    return answer
  • 좌표
    • 현 위치에서 오른쪽/아래/대각선이 같은지 확인
  • 스택
    • 지워진 공백을 채우기 위해 스택 사용

 

다른 사람이 작성한 코드

None

 

기억해야할 것

  • 코드가 조금 긴 것 같다