2019 카카오 개발자 겨울 인턴십
문제 풀러 바로가기 👇👇👇👇👇👇
https://programmers.co.kr/learn/courses/30/lessons/64061
코드
def solution(board, moves):
answer = 0
stack = [-1, 0]
for move in moves:
for step in range(len(board)):
if board[step][move-1] != 0:
stack.append(board[step][move-1])
board[step][move-1] = 0
break
if stack[-2] == stack[-1]:
answer += 2
stack.pop()
stack.pop()
return answer
문제풀이
stack에 -1, 0 값을 넣어준건 out of range 오류 발생을 사전에 막기 위해 더미값을 넣어둔 것이다.
(만약 더미값을 넣기 싫다면 반복문 안에서 계속 if문을 돌려야하기 때문에 굉장히 비효율적이다.)
각 이동시마다 인형을 뽑으므로, moves를 반복문의 기준으로 삼는다.
2차원 배열이기때문에 그 안에서 반복문을 하나 더 돌려준다.
만약 인형이 있으면 0이 아닌 값이 들어있을 것이다. 그 값을 스택에 넣어주고 0으로 바꿔준다.
break를 통해 꼭 나와줘야한다. 만약 그렇지 않으면 계속해서 같은 칸의 인형을 모두 뽑아버린다.
마지막으로 배열 맨 뒤의 값 2개를 확인한다. 만약 같다면 그 인형을 터트려주면 된다.
(answer값 2만큼 늘려주고, 스택에서 제거하기)