해당 문제는 프로그래머스 고득점 kit 스택에 속하는 문제로, list안에 있는 연속적인 중복 데이터를 제거하는 것이 풀이의 핵심이다. 파이썬에서는 기본으로 내장된 list를 활용하여 스택 문제를 해결한다.
스택(Stack) 알고리즘에 대한 설명은 이 포스팅 참고 !
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
| arr | answer |
|---|---|
| [1,1,3,3,0,1,1] | [1,3,0,1] |
| [4,4,4,3,3] | [4,3] |
입출력 예 #1,2
문제의 예시와 같습니다.
def solution(arr):
result =[] # stack 생성
for x in arr:
if len(result) != 0:
if x != result[-1]:
result.append(x)
else:
result.append(x)
return result
빈 리스트를 생성하고 기존 리스트에서 for문을 활용해 값을 순회하면서 비교해준다.
리스트가 비어있을 경우 append를 활용해 값을 삽입하고, 리스트가 비어있지 않을 경우 가장 최근 삽입한 값과 비교한 뒤 값을 삽입한다.
def solution(arr):
result = []
for i in arr:
if result[-1:] == [i]:
continue
a.append(i)
return result
나의 경우, 두 번의 if문을 통해 result list가 비어있는 경우와, result list에 가장 최근에 삽입한 값을 비교해줬는데 ,,, list slicing을 이용하면 빈 리스트도 error가 발생하지 않다는 것을 이 코드를 통해 처음 알았다 !
위 코드에서 result[-1:]와 i를 비교해준 것이 아닌, [i]와 비교해준 이유는 result[-1:]가 리스트 형식으로 반환이 되기 때문 ! 따라서 비교해주는 [i]도 리스트 형식이어야 한다.