사용 언어: python 3.7.4
문제
👉 아이디어 Point
1. board는 오른쪽으로 90도 회전해서 사용
2. moves-1에 적힌 값은 board의 행
3. 스택 arr는 리스트로 구현
👉 코드 동작 과정
for m in moves:
moves로 myboard 해당 행으로 이동, myboard에서 0보다 큰 가장 마지막 값 l 뽑기
if arr의 마지막 값과 l 값이 같으면: answer+=2
else arr로 해당값 넣기
# Input
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):
moves = [x - 1 for x in moves]
# board 시계방향 90도 회전
n = len(board) # 5
myboard = [[] for _ in range(n)]
for i in range(n):
for j in range(n):
myboard[j].insert(0, board[i][j])
# 반복시작
arr = []
answer = 0
for m in moves:
for v in reversed(range(n)): # n-1부터 0까지
if myboard[m][v] != 0:
if not arr: # empty arr 일 때
arr.append(myboard[m][v])
else:
if arr[-1] == myboard[m][v]: # 연속된 같은 값 삭제
answer += 2
del arr[-1]
else: # 연속된 값 아님. 그냥 삽입
arr.append(myboard[m][v])
myboard[m][v] = 0
break
return answer
# 함수 호출
solution(board, moves)
correct
아이디어 시간: 11:36 ~ 11:57
코드 짜기 시간: 11:57~ 1:13
코드 작성 시간이 길었다.