코딩테스트/프로그래머스

[프로그래머스][Python] 크레인 인형뽑기 게임

solitude12 2024. 4. 11. 17:03

문제 링크

 

프로그래머스

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

programmers.co.kr


문제 풀이 과정

  • 핵심은 입력된 배열을 열 별로 0부터 차례대로 훑다가 0을 제외한 수를 만나면 뽑기.
  • 뽑은 자리에는 인형이 없으므로 0으로 변환
  • 인형을 차례대로 뽑은 주머니는 스택 형태로 구현.
    • 스택에 가장 최상단 값과 현재 값이 같다면 pop 하고 인형 수 count
    • top 값과 현재 값이 다르다면 새 인형 append

# 예제 입력
board = [[0, 0, 0, 0, 0],
         [0, 0, 1, 0, 3],
         [0, 2, 5, 0, 1],
         [4, 2, 4, 4, 2],
         [3, 5, 1, 3, 1]]
moves = [1, 5, 3, 5, 1, 2, 1, 4]


def solution(board, moves):
    stk = []
    count = 0
    for move in moves:
        # 각 열의 상단부터 열을 기준으로 훑기.
        for i in range(len(board[0])):
            # 처음 0 이 아닌 값이 나오면
            if board[i][move - 1] != 0:
                picked = board[i][move - 1]
                board[i][move - 1] = 0
                # stack에 있는 값과 비교했을 때 같으면
                if stk and stk[-1] == picked:
                    stk.pop()
                    count += 2
                # 같지 않으면 추가만 해주기.
                else:
                    stk.append(picked)
                # 인형을 뽑았으니 다음 move로 이동
                break

    return count


print(solution(board, moves))