코딩테스트 고득점 Kit - 스택/큐 문제


✔️ 문제 설명

배열 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보다 작거나 같은 정수
  • 👉 문제 보러가기

입출력 예

arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

입출력 예 설명

입출력 예 #1,2 문제의 예시와 같습니다.


✔️ 문제 풀이

(1) Pseudo-Code

  1. 주어지는 배열은 중복된 값이 있다면 붙어있다.
  2. 0~9 사이의 값만 존재한다는 점을 이용해 변수에 10을 기본값으로 설정한다.
  3. 이전 값을 변수에 계속 할당하여 이전값과 현재값이 같으면 패스하고 같지않으면 리스트에 넣는다.
  4. 위 과정을 통해 연속되는 값을 1개만 불러온다.

(2) 코드 작성

def solution(arr):
    answer = []
    a = 10
    
    for num in arr:        
        if a != num:
            answer.append(num)    
        a = num
    
    return answer

(3) 코드 결과

  • 성능요약 : 메모리 27.9 MB, 시간 41.02 ms
  • 채점결과 : 정확성 71.9, 효율성 28.1, 합계 100.0/100.0

(4) 코드 리뷰 및 회고

  • 이번 문제는 리스트 내 요소의 이전 값을 변수에 할당하여 저장하고 그 다음 값이 이전 값과 일치하다면 pass, 일치하지 않다면 리스트에 추가되도록 설정했다.
  • 메모리와 시간(성능요약)을 보면 잘 푼 것 같진 않지만.. EASY 😎


댓글남기기