https://programmers.co.kr/learn/courses/30/lessons/64061
배열과 pop함수를 사용하여 풀었다.
배열을 순서대로 쌓는 과정에서 바로 이전 배열의 값과 반복되는 값이 있으면 이를 제거하고 다시 쌓아 올리는 방식을 택했다.
def solution(board,moves):
result_lst=[]
n=0
result=0
for j in moves:
for i in range(len(board)):
# board배열의 해당위치에 값이 있으면 result_lst에 해당 값 추가한 후
# 해당 값의 위치를 알려주는 n변수에 +1
# board의 해당 위치의 인형은 이미 뽑혀 없어졌으므로 0 삽입
if board[i][j-1]!=0: result_lst.append(board[i][j-1]); n+=1; board[i][j-1]=0; break
# result_lst의 두번째 요소부터 조건식 적용, 바로 이전의 수와 방금 들어온 값이 같으면
# 바로 이전 수와 들어온 수를 result_lst에서 빼주고 뺄 때 마다 result_lst 배열의 수 -1
if n>= 2 and result_lst[n-2] == result_lst[n-1]:
result_lst.pop(n-1); result += 1; n -= 1
result_lst.pop(n-1); result += 1; n -= 1
return result
해당 코드에선 result_lst의 위치를 추출하기 위해 n 변수를 사용했지만, n변수를 빼고도 충분히 구현가능하다.
코드의 이해를 돕기 위해 다음 코드를 가져와보았다.
바로 이전 값인 1과 가장 최근에 들어온 값인 1이 같으므로 double을 출력하고 두 요소를 배열에서 빼준다. 그러면 n값은 2가 되는데 다음 moves요소 차례에 하나의 값이 다시 추가되므로 n은 3이된다. 추가된 배열에서 요소 3과 3이 같으므로 double을 출력하고 두 요소를 또 빼준다.
총 4개의 값이 배열에서 빠졌으므로 result는 4가 된다.
'python > 알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스 | 파이썬3] 키패드 누르기 (1) | 2021.05.21 |
---|---|
[프로그래머스 | 파이썬3] 로또의 최고 순위와 최저 순위 (1) | 2021.05.20 |
[프로그래머스 | 파이썬3] 신규 아이디 추천_정규표현식, strip활용 (1) | 2021.05.18 |
[프로그래머스 | 파이썬3] 내적_sum함수 활용 (1) | 2021.05.18 |
[프로그래머스 | 파이썬3] 소수 만들기_combinations활용 (2) | 2021.05.17 |