https://programmers.co.kr/learn/courses/30/lessons/64061?language=python3
def solution(board, moves):
answer = 0
basket = []
for move in moves:
for j in range(len(board)):
#print(move, board[j])
if board[j][move - 1] == 0:
pass
else:
basket.append(board[j][move-1])
board[j][move-1] = 0 # 이게 잘안되는듯.
#==으로하면 안되고 = 으로해야함
break
print(basket)
# 바스켓은 완성했고, 이제 같은애들만 뺴내면된다.
if len(basket) >= 2 and basket[len(basket)-1] == basket[len(basket)-2]:
basket.pop(-1)
basket.pop(-1)
answer += 1
return answer * 2
print(solution([[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]], [1, 5, 3, 5, 1, 2, 1, 4]))
[4]
[4, 3]
[4, 3, 1]
[4, 3, 1, 1]
[4, 3, 3]
[4, 2]
[4, 2]
[4, 2, 4]
4
원래는 다 만들어진 바스켓에서 해당인덱스와 다음인덱스가 같은걸 제거하는 방식으로 count하려고 했는데 당췌 생각이 잘나지 않았다.
그래서 그냥 바스켓에 쌓여갈 때마다 제거 해주기로 했다.
if len(basket) >= 2 and basket[len(basket)-1] == basket[len(basket)-2]:
basket.pop(-1)
print(basket)
basket.pop(-1)
print(basket)
answer += 1
print(answer)
[4]
[4, 3]
[4, 3, 1]
[4, 3, 1, 1]
[4, 3, 1]
[4, 3]
1
[4, 3, 3]
[4, 3]
[4]
2
[4, 2]
[4, 2]
[4, 2, 4]
4
일단 비교를 하려면 바스켓에 두개이상은 들어있어야하며
len(basket) >= 2
그와 동시에
and
바스켓의 뒤에서 첫번째와 두번째 요소가 같을때 그 두개를 순차적으로 제거해주면 된다.
basket[len(basket)-1] == basket[len(basket)-2]:
basket.pop(-1)
basket.pop(-1)
그리고 사라진 두개당 카운트를 1회한다음 나중에 *2해줘도 문제없다.
알고리즘을 본격적으로 풀기시작한게 두달정도 된거같은데, 처음에 이 문제를 봤을 땐 감도못잡고 어이없었는데 지금이렇게 풀어내는걸 보니 신기하다.
물론 아직 코드가 효율적이진 않은것 같다. 복잡도를 더 고려해서 개선할 필요가 있다.