def solution(board, moves):
basket = []
result = 0
for n in moves:
for M in range(len(board)):
if board[M][n-1] != 0:
if not basket:
basket.append(board[M][n-1])
board[M][n-1] = 0
break
if basket[-1] == board[M][n-1]:
basket.pop()
result += 2
board[M][n-1] = 0
break
basket.append(board[M][n-1])
board[M][n-1] = 0
break
return result
2차원 리스트는 1차원 리스트에 비해 활용이 까다롭다.(개인적으로 그렇다...) 2차원 리스트에선 인덱스가 가로·세로로 부여되기 때문에 고려해야 할 가짓수가 늘어나기 때문이다. 이러한 복잡한 구조 때문이라도, 2차원 문제를 풀 때는 머릿속으로 계산해 가며 실마리를 찾기보단, 직접 가로·세로 인덱스를 순서대로 나열해가며 숨어있는 규칙성을 찾는 것이 바람직해 보인다.
우선 위치(moves 인자로 받은 데이터) 별로 크레인이 움직이는 인덱스를 나열해보자. 크레인이 이동하는 동선을 알아야 뽑는 인형이 무엇인지도 파악할 수 있기 때문이다.
# moves 1 -> (0,0), (1,0)... (4, 0) -> 5x5 배열의 1번 위치에서 크레인이 움직이는 인덱스
# moves 2 -> (0,1)... (4, 1) -> 5x5 배열의 2번 위치에서 크레인이 움직이는 인덱스
# .
# .
# .
# moves n -> (0, n-1) ... (N-1, n-1) -> NxN 배열의 n번 위치에서 크레인이 움직이는 인덱스
for n in moves:
for M in range(len(board)):
board[M][n-1]
basket = []
for n in moves:
for M in range(len(board)):
if board[M][n-1] != 0:
basket.append(board[M][n-1])
basket = []
for n in moves:
for M in range(len(board)):
if board[M][n-1] != 0:
if not basket:
basket.append(board[M][n-1])
board[M][n-1] = 0
break
basket = []
result = 0
for n in moves:
for M in range(len(board)):
if board[M][n-1] != 0:
if not basket:
basket.append(board[M][n-1])
board[M][n-1] = 0
break
if basket[-1] == board[M][n-1]:
basket.pop()
result += 2
board[M][n-1] = 0
break
def solution(board, moves):
basket = []
result = 0
for n in moves:
for M in range(len(board)):
if board[M][n-1] != 0:
if not basket:
basket.append(board[M][n-1])
board[M][n-1] = 0
break
if basket[-1] == board[M][n-1]:
basket.pop()
result += 2
board[M][n-1] = 0
break
basket.append(board[M][n-1])
board[M][n-1] = 0
break
return result
def solution(board, moves):
count = 0
stack = []
for move in moves: ### 1
for boards in board:
selected = boards[move-1]
if selected != 0:
stack.append(selected)
boards[move-1] = 0
if (len(stack) >= 2) and (stack[-1] == stack[-2]): ### 2
count += 2
stack = stack[:-2]
break ### 3
return count