https://school.programmers.co.kr/learn/courses/30/lessons/64061
def solution(board, moves):
answer = 0
stack = list()
# 가로 기준으로 되어있는 칸 정보를 세로 기준으로 바꾸기
new_board = list()
for i in range(len(board)) :
temp = list()
for j in range(len(board)) :
temp.append(board[j][i])
new_board.append(temp)
# moves를 돌면서 인형 빼기 - moves에서 1씩 뺀 후에 인덱싱(인덱스는 0부터니까)
for m in moves :
for i in range(len(board)) : # 칸 개수만큼 반복
if new_board[m-1][i] != 0 : # 인형이 있는 칸이라면
stack.append(new_board[m-1][i]) # 그 인형을 stack에 담고
new_board[m-1][i] = 0 # 인형 판에서는 삭제
# 맨 뒤 두 인형이 같은 인형이라면 빼주기
if len(stack) > 1 and stack[-1] == stack[-2] :
stack.pop()
stack.pop()
answer += 2
break
return answer
예제에서 든 예시를 그려보면 아래와 같다.
그런데 입력값으로 열 정보를 주고 있으므로 인덱싱해서 사용하기 위해 위 행렬을 전치해준다. 그러면 아래와 같은 행렬로 바뀐다.
이제 인덱싱을 사용할 수 있으므로 제시된 열에서 가장 마지막 숫자가 0이 아닌 경우에 빼서 stack에 넣는 방법으로 구현한다.