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

Min-Jae Song·2021년 4월 21일
0

코테

목록 보기
4/10

인형뽑기 문제
스택을 이용하면 간단하다.

(삽질)

from collections import deque

def solution(board, moves):
    
    result_list =[]
    dict_board = {i : deque([]) for i in range(len(board))}
    answer = 0
    for i in board:
        for j in range(len(board)):
            dict_board[j].append(i[j])
            
    for move in moves:
        if not dict_board[move-1]:
            continue
            
        while (dict_board[move-1]) and (dict_board[move-1][0] == 0) :
            dict_board[move-1].popleft()
            
        if not dict_board[move-1]:
            continue
            
        if not result_list:
            result_list.append(dict_board[move-1].popleft())
        else:
            if result_list[-1] == dict_board[move-1][0]:
                dict_board[move-1].popleft()
                result_list.pop()
                answer +=2
            else:
                result_list.append(dict_board[move-1].popleft())
             
    return answer

그냥 머리속에 생각나는대로 구현해봤다. 입력받은 2차원배열에 Transpose가 먼저 생각났지만 numpy모듈을 쓸 수는 없어서 굳이 순회해가면서 dictionary에 담았는데 사실 이렇게 풀면 안된다...

def solution(board, moves):
   stacklist = []
   answer = 0

   for i in moves:
       for j in range(len(board)):
           if board[j][i-1] != 0:
               stacklist.append(board[j][i-1])
               board[j][i-1] = 0

               if len(stacklist) > 1:
                   if stacklist[-1] == stacklist[-2]:
                       stacklist.pop(-1)
                       stacklist.pop(-1)
                       answer += 2     
               break

   return answer

2차원 배열을 행렬이라고 생각했을 때 문제에서 move는 열에 해당한다. 그리고 j가 점점 증가하는 것은 행으로 밑으로 내려가는 것을 의미한다. 0이 아니면 스택에 넣고 해당 위치를 0으로 다시 채워준다. 그리고 비교문을 통해 비교 후 두개씩 빼고 answer++2
쉬운문제다.

profile
개발세발스토오리

0개의 댓글