본문 바로가기

알고리즘 삽질장

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

반응형


문제설명

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

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

사고과정

  • 문제에서 크레인 위치가 2차원 배열 board의 열을 의미한다고 볼 수 있다. 그리고 각 크레인의 위치마다 가장 상위의 인형을 뽑아낸다고 했으니 크레인 위치가 주어졌을 때, board의 열은 크레인 위치로 고정시키고 행만 loop로 돌면서 인형이 발견되었을 때 바구니에 넣어준다.
  • 이 때 바구니는 스택으로 구현하면 된다. 그런데 바구니에 인형을 새롭게 넣어주기 전에, 바구니의 가장 상위에 있는 인형이 새롭게 넣어줄 인형과 동일한지 아닌지 비교한다. 만약 동일하면 터뜨려줘야 하는 인형들이기 때문에 새로운 인형을 넣지 않고 바구니의 가장 상위 인형을 pop한뒤 터뜨려져 사라진 인형의 개수에 +2하면 된다. 이 때 바로 break 걸어야 함!
  • 그리고 크레인에서 뽑아낸 인형의 위치에는 뽑았다고 체크해주어야 하므로 0으로 값을 갱신해주어야 함
  • 구현문제 유형이였던 듯 하다!

풀이

def solution(board, moves):
    # 바구니
    stack = []
    
    answer = 0
    for m in moves:
        # 크레인에서 인형 뽑기
        for i in range(len(board)):
            if board[i][m-1] != 0:
                # 바구니 가장 위에 동일한 물건이 있는지 확인
                if stack and board[i][m-1] == stack[-1]:
                    stack.pop()
                    answer += 2
                else:
                    stack.append(board[i][m-1])
                board[i][m-1] = 0  # 인형 빼낸 곳 0으로 갱신
                break
                
    return answer

 

반응형