All Articles

Code Kata-21(PY)

오랫만에 알고리즘 문제를 한번 풀어보고 싶어서 프로그래머스에 나와있는 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임을 풀어보았다.

문제 링크

솔루션

def solution(board, moves):
    result = 0
    basket = []
    grid = {}
    # x, y 축 변환
    for y, values in enumerate(board):
        values_len = len(values)
        for x in range(values_len):
            idx = x + 1
            if values[x] > 0:
                if idx not in grid:
                    grid[idx] = [values[x]]
                else:
                    grid[idx].append(values[x])
    # 변환된 x, y 축에 따라 바구니에 인형 넣기
    for move in moves:
        last_idx = len(basket) - 1
        last_n = basket[last_idx] if last_idx > -1 else None
        if len(grid[move]):
            if grid[move][0] == last_n:
                basket.pop(last_idx)
                grid[move].pop(0)
                result = result + 2
            else:
                basket.append(grid[move].pop(0))
    return result

이차원 배열은 [y-axis][x-axis] 이라고 생각하면 좀 더 간결하게 풀 수 있으나, 이 방법이 순차적으로 사고했을때 더 직관적이어서 상기와 같이 풀었다.

*Reference:
프로그래머스 - 크레인 인형뽑기 게임