크레인 인형뽑기 게임

이종호·2020년 10월 30일
1

알고리즘

목록 보기
17/18

문제

2차원 배열 board와 1차원 배열 moves가 주어진다.
board는 사진과 같이 인형(정수)가 들어가 있는 형태이고, moves는 뽑는 위치이다.
뽑기는 위에서 아래로 내려가므로 위에서부터 뽑아내며, 아무것도 없는 칸일 경우 어떤 것도 뽑지 못한다.

그리고 뽑은 인형들을 쌓아두는 박스가 옆에 있는데 같은 가장 최근의 인형과 지금 들어오는 인형이 같은 인형이라면 삭제된다.
(삭제되는 경우)

이때 삭제되는 인형의 개수를 구해라.

코드

def solution(board, moves):
    answer = 0
    arr = []
    for move in moves:
        for i in range(len(board)):
            if board[i][move-1] != 0:
                if len(arr) == 0:
                    arr.append(board[i][move-1])
                    board[i][move-1] = 0
                    break
                if arr[-1] != board[i][move-1]:
                    arr.append(board[i][move-1])
                    board[i][move-1] = 0
                    break
                else:
                    arr.pop()
                    board[i][move-1] = 0
                    answer+=2
                    break
    return answer

풀이

  • 인형들을 쌓아둘 배열 arr를 생성한다.
  • moves의 값들에 따라 boards의 값들을 한 개씩 뽑아 arr에 넣을지 삭제할지 결정한다.
  • boards의 위에서 부터 확인하며 0이 아닌 경우에만 뽑을 수 있도록 했으며, 배열의 길이만큼 반복할 수 있도록 했다.

느낀점

  • 예전에는 어려워서 한 번에 못 풀었는데, 지금 보니 쉽게 풀렸다.
    이래서 많이 풀어보는게 좋은건가 싶기도하고 정리를 잘 하는게 중요하다는 것도 새삼 느꼈다.
  • 배열의 추가 삭제가 주된 업무이므로 일반 list말고 deque을 사용했다면..?
    글쎄 아직 파이썬의 배열 구조에서 어떤 업무가 효율적인지(index로 값을 가져오는게 빠른 자료구조, 값을 추가하거나 삭제하는게 빠른 자료구조) 잘 모르겠다.

ps

추가로 찾아보았지만 딱히 큰 차이가 있는 것 같진 않았다.
deque가 좀 더 빨랐지만 왠만한 알고리즘에서 큰 차이는 없을 것 같다.

profile
열심히 사는 사람

0개의 댓글

관련 채용 정보