[프로그래머스] Lv 1. 같은 숫자는 싫어

싱숭생숭어·2023년 9월 2일
0

프로그래머스

목록 보기
16/21

해당 문제는 프로그래머스 고득점 kit 스택에 속하는 문제로, list안에 있는 연속적인 중복 데이터를 제거하는 것이 풀이의 핵심이다. 파이썬에서는 기본으로 내장된 list를 활용하여 스택 문제를 해결한다.

스택(Stack) 알고리즘에 대한 설명은 이 포스팅 참고 !


문제

문제 설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
    배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항

- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예

arranswer
[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]도 리스트 형식이어야 한다.

profile
공부합시당

0개의 댓글