문제
https://programmers.co.kr/learn/courses/30/lessons/64061
풀이
def solution(board, moves):
answer = 0
stack = []
ht = {}
for mov in moves :
if not mov in ht :
ht[mov] = [i[mov-1] for i in board if i[mov-1] > 0]
ht[mov].reverse()
if len(ht[mov]) > 0 :
if len(stack) > 0 and stack[-1] == ht[mov][-1] :
stack.pop()
answer += 2
else :
stack.append(ht[mov][-1])
ht[mov].pop()
return answer
고작 스택문제 하나 푸는데 해시까지 사용한 이유는
리스트를 column 단위로 다시 쪼개어 저장한 다음
Call-by-reference 느낌으로 pop() 시키고 있었는데
실제 동작은 Call-by-value 였기 때문에
Call-by-reference 느낌을 낼 수 있도록 해시에 저장시켰다.
덕분에 가독성이 많이 떨어지는 지저분한 코드가 만들어졌다.
대신 moves가 많아질수록 속도는 빨라지겠지?
더 나은 풀이
def solution(board, moves):
stacklist = []
answer = 0
for i in moves:
for j in range(len(board)):
if board[j][i-1] != 0:
stacklist.append(board[j][i-1])
board[j][i-1] = 0
if len(stacklist) > 1:
if stacklist[-1] == stacklist[-2]:
stacklist.pop(-1)
stacklist.pop(-1)
answer += 2
break
return answer
스택을 간단히 이용한 이쪽이 가독성이 훨 좋은 것 같다.
댓글남기기