문제 링크
문제 풀이 과정
- 핵심은 입력된 배열을 열 별로 0부터 차례대로 훑다가 0을 제외한 수를 만나면 뽑기.
- 뽑은 자리에는 인형이 없으므로 0으로 변환
- 인형을 차례대로 뽑은 주머니는 스택 형태로 구현.
- 스택에 가장 최상단 값과 현재 값이 같다면 pop 하고 인형 수 count
- top 값과 현재 값이 다르다면 새 인형 append
# 예제 입력
board = [[0, 0, 0, 0, 0],
[0, 0, 1, 0, 3],
[0, 2, 5, 0, 1],
[4, 2, 4, 4, 2],
[3, 5, 1, 3, 1]]
moves = [1, 5, 3, 5, 1, 2, 1, 4]
def solution(board, moves):
stk = []
count = 0
for move in moves:
# 각 열의 상단부터 열을 기준으로 훑기.
for i in range(len(board[0])):
# 처음 0 이 아닌 값이 나오면
if board[i][move - 1] != 0:
picked = board[i][move - 1]
board[i][move - 1] = 0
# stack에 있는 값과 비교했을 때 같으면
if stk and stk[-1] == picked:
stk.pop()
count += 2
# 같지 않으면 추가만 해주기.
else:
stk.append(picked)
# 인형을 뽑았으니 다음 move로 이동
break
return count
print(solution(board, moves))