[프로그래머스] 크레인 인형뽑기 게임 / Python / 스택(Stack)

크레인 인형뽑기 게임

  • 문제
    게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요. 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다.

  • 제한사항
    - board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
    - board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    - 0은 빈 칸을 나타냅니다.
    - 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
    - moves 배열의 크기는 1 이상 1,000 이하입니다.
    - moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

나의 풀이

  • 스택 개념
  • len(dolls) 할 필요 없이 애초에 0을 dolls에 넣어놓고 시작하는 방법도 있다.
def solution(board, moves):
    dolls = []
    answer = 0
    for m in moves:
        i = 0
        while i < len(board):
            if board[i][m - 1] != 0: # 인형을 잡음
                picked = board[i][m - 1]
                # 바구니에 인형이 1개 이상이고 현재 잡은 인형과 같은 인형이 맨 위에 있으면
                if len(dolls) >= 1 and picked == dolls[-1]: 
                    answer += 2
                    dolls = dolls[:-1] # 맨 위에 있는 인형 제외
                else:
                    dolls.append(picked) 
                board[i][m - 1] = 0
                break
            i += 1
        
    return answer

좋은 웹페이지 즐겨찾기