프로그래머스 | 같은 숫자는 싫어

chaen·2024년 2월 16일
post-thumbnail

📌 문제

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

배열 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]

✨ 해결 방법

언뜻 보면 set 을 써야 할 것 같지만 그렇지 않습니다. 첫 번째 예제만 봐도 1이 두 번 나오기 때문에 stack을 이용하여 풀이합니다.

arr를 돌면서 만약 stack의 요소가 하나 이상 존재하고, 마지막 요소가 현재 요소와 같으면 마지막 요소를 pop 합니다.

그렇지 않은 경우, 만약 중복되는 수의 첫 글자 혹은 중복되지 않는 수라면, 혹은 심지어 중복되어 위에서 if 문을 실행했더라도 1개는 남겨두어야 하므로 stack.push(e) 코드를 실행합니다.

💻 solution

function solution(arr){
   let stack = [];
    
    arr.forEach (e =>{
        if (stack.length !== 0 && stack[stack.length-1] === e){
            stack.pop();
        }
        stack.push(e);
    })
    
    return stack;
}

0개의 댓글