티스토리 뷰

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1. 접근 방식

  • board의 행과 열을 교환하여 전치행렬로 문제를 풀자.

크레인은 열을 기준으로 접근하여 인형을 뽑지만, 행과 열로 이루어진 리스트는 행을 우선해서 접근한다. 따라서 위 그림처럼 전치행렬로 board를 바꾼 후 뽑기를 처리해야겠다고 생각했다.

 

  • moves를 순회하면서 바구니에 인형을 넣고, 곧 바로 터트려지는 인형이 있는지 확인하자.

바구니에 넣자마자 가장 마지막에 들어간 인형과 바로 이전에 들어간 인형, 즉 숫자가 똑같은지 확인하자. 만약 두 숫자가 동일하다면 바구니에서 가장 마지막 원소(-1번째)와 그 앞의 원소(-2번째)를 삭제한다.

 

 

2. 정답 코드

def transpose(data):
    results = [[] for _ in range(len(data))]
    for i in range(len(data)):
        for j in range(len(data)):
            if data[j][i]:
                results[i].append(data[j][i])
    
    return results

def solution(board, moves):
    board = transpose(board)

    ans = 0
    stack = []
    for move in moves:
        if not board[move-1]: # 빈칸 처리
            continue
            
        stack.append(board[move-1].pop(0))
        if len(stack) > 1 and stack[-1] == stack[-2]:
            stack = stack[:-2]
            ans += 2
            
    return ans
728x90