인형뽑기 문제
스택을 이용하면 간단하다.
(삽질)
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
쉬운문제다.