반응형

이번에 풀어볼 문제는 프로그래머스의 스택/큐 부분에 있는 '같은 숫자는 싫어'이다.

간단하게 설명하면 1 1 2 3 4 이런식으로 값이 존재하면 1 2 3 4처럼 연속된 숫자를 제외하고 반환하면 되는데, 가장 먼저 넣은 것이 가장 앞에 들어가서 가장 최근에 들어간게 가장 마지막에 존재하는 스택을 잘 활용하면 쉽게 풀 수 있다.

 

먼저 입력받은 배열을 하나씩 순회해야 한다.

for i in arr:

 

다음으로, 가장 초기값은 중복된 값이 없을 테니 정답으로 쓸 새로운 리스트에 값이 없다는 것과 동일하다. 이 생각 그대로 코드를 짜면 다음과 같이 작성할 수 있다.

answer = []
    for i in arr:
        if not answer:
            answer.append(i)

 

이제 중복 검사를 해야 하는데 스택 자료구조에서는 가장 마지막에 들어온 값이 가장 뒤에 있는 것을 알 수 있다.

파이썬의 리스트를 사용할 때, 마지막 원소 값을 갖고 오고 싶을 때는 인덱싱을 활용할 수 있는데, list_name[-1] 과 같이 사용하여 불러올 수 있다.

즉, 마지막에 존재하는 값과 내가 추가하고자 하는 값이 동일하다면 중복된 값이라는 것이다.

answer = []
    for i in arr:
        if not answer:
            answer.append(i)
        elif answer[-1] != i:
            answer.append(i)

 

전체 코드

def solution(arr):
    answer = []
    for i in arr:
        if not answer:
            answer.append(i)
        elif answer[-1] != i:
            answer.append(i)
    return answer