읽는 데 3분 19. January 2021
프로그래머스 크레인 인형뽑기 게임 파이썬 풀이

크레인 인형뽑기 게임

크레인 인형뽑기 게임을 구성하기 위한 2차원 배열이 주어진다. N번 인덱스는 N번 행이라고 생각하면 편하다. 그리고 크레인이 움직이는 곳이 주어진다. 크레인이 움직여 해당 열에 제일 위에 있는 인형을 바구니에 넣는다. 바구니는 스택 구조라고 생각하면 편하다. 이 바구니에 연속적으로 똑같은 인형이 2개 있으면 그 인형은 폭발하고 폭발된 인형의 수를 구하면 되는 문제이다.

스택을 쓰는 문제이지만 스택에 대해 자세히 몰라도 풀 수 있었고, 2차원 배열을 적절히 활용하면 쉽게 풀 수 있는 문제였다. 먼저 스택과 폭발된 인형의 갯수를 담을 변수가 필요하다.

stack = []
b = 0

크레인이 움직일 때 그 열의 인형을 반드시 뽑는다는 조건이다. 그리고 각 열에는 인형이 있을 수도 있고 없을 수도 있지만 크레인이 반드시 인형을 뽑을 수 있다는 조건을 전제로 한다. (없으면 아무 것도 하지 않음)

for move in moves:
  for i in range(0, len(board)):
    doll = board[i][move-1]
    if not doll == 0:
      board[i][move-1] = 0
      if len(stack) and stack[-1] == doll:
        stack.pop()
        b += 2
      else:
        stack.append(doll)
      break

크레인이 움직이는 횟수 만큼 반복한다. 해당 열에서 격자를 맨 위에서부터 하나씩 이동한다. moves 리스트는 N번 째 열을 의미하므로 1을 빼서 계산해준다.

크레인이 도착한 격자에 인형이 없으면 다음으로 이동하고, 만약 인형이 있으면 현재 바구니에 담겨져 있는 인형 중 맨위의 인형과 비교하고 다르면 스택에 넣고 같으면 터트리고 b를 2 더해준다. (폭발된 인형의 갯수를 구해야하는데 처음에 폭발된 횟수를 구하는 것이라 이해하고 1을 더했다가 몇 십분동안 삽질했다) 그리고 해당 격자에 인형은 크레인이 끌고갔으므로 0으로 변경해준다. 그리고 크레인은 해당 열의 인형을 이미 가져갔으므로 다음으로 이동하기 위해 break를 걸어준다.

마지막으로 b를 반환해주면 끝난다. 모든 문제가 풀기 전에는 어려워보이지만 풀고 나면 쉬워지는 이상한 느낌이든다..