https://programmers.co.kr/learn/courses/30/lessons/64061
def solution(board, moves):
answer = 0
box = []
for move in moves:
for doll in board :
if(doll[move-1] != 0):
box.append(doll[move-1])
doll[move-1] = 0
break
if(len(box) >= 2):
if(box[len(box) -1] == box[len(box) -2]):
box.pop()
box.pop()
answer +=2
return answer
처음 푼 풀이는 moves만큼 for문을 돌고 board의 배열들을 도는데 그 안의 move-1 값이 0 이 아니면 box에 넣는 것이었다. 그리고 마지막 것과 마지막 전 것이 같으면 둘다 pop으로 빼내고 답에 2를 더했다.
이번에 푼 풀이는 풀이가 더 길어졌다. 예전에 시험 칠 때랑 생각이 달라졌나보다.
def solution(board, moves):
changeList = changeXY(board)
resultList = []
answer = 0
for value in moves:
if len(changeList[value-1]) != 0:
if len(resultList) == 0:
resultList.append(changeList[value-1].pop(0))
else:
doll = changeList[value-1].pop(0)
if doll == resultList[len(resultList)-1]:
resultList.pop()
answer += 2
else:
resultList.append(doll)
return answer
def changeXY(board):
changeList = [[] for _ in range(len(board))]
for i in range(len(board)):
for j in range(len(board[i])):
if(board[i][j] != 0):
changeList[j].append(board[i][j])
return changeList
changeXY 함수를 만들어서 board의 x y 좌표를 바꾸어 주었다. 그래서 changeList의 1번째에는 첫번째줄 인형만 두번째에는 두번째줄 인형만... 이렇게 바꾸었다. 0일 때는 안 넣었기 때문에 0검사는 안 해도 된다. 대신에 len 검사를 해주어야함.
moves 만큼 도는데 changeList 리스트가 빈 리스트가 아닐 때 따로 나누어서 검사를 했다. doll을 담아두는 result가 비워있으면 그냥 넣고 차있으면 마지막 것과 검사해서 같으면 빼내고 다르면 그냥 넣게 만들었다.