[프로그래머스] 같은 숫자는 싫어 문제 풀이

프린이·2024년 11월 27일
post-thumbnail

🚀문제 요약

배열 주어질 때 연속으로 반복되는 숫자는
하나만 남기고 전부 제거해야 함 👊
단, 숫자의 순서는 그대로 유지해야 함

ex )

  • 입력 : [1, 1, 3, 3, 0, 1, 1]
    결과 : [1, 3, 0, 1]
  • 입력 : [4, 4, 4, 3, 3]
    결과 : [4, 3]

👩‍💻 1 ) 단순 배열과 반복문 이용한 코드

function solution(arr) {
  // 새로운 배열 만들기
  // 여기엔 같은 숫자가 연속으로 나오지 않을 것
  const result = [];
  
  // 배열의 숫자들을 하나씩 확인
  for (let i = 0; i < arr.length; i++) {
    // 첫 번째 숫자는 바로 넣어주기
    // 또는 지금 숫자가 바로 전 숫자와 다를 때만 넣기
    if (i === 0 || arr[i] !== arr [i - 1]) {
      // 숫자를 새 배열에 추가
      result.push(arr[i]);
    }
  }
  // 이제 중복 제거된 숫자들만 들어있는 새 배열 반환
  return result;
}
console.log(solution([1, 1, 3, 3, 0, 1, 1])); // [1, 3, 0, 1]
console.log(solution([4, 4, 4, 3, 3]));       // [4, 3]

👩‍💻 2 ) 스택을 이용한 코드

스택 방식 사용한다면 이전 숫자를
스택의 마지막 값으로 활용해 중복을 비교할 수 있음

function solution(arr) {
  // 스택 역할을 할 빈 배열 준비
  const stack = [];
  
  for (let num of arr) { // 배열의 숫자들을 하나씩 확인
    if (stack.length === 0 || stack[stack.length - 1] !== num) {
      // 스택이 비어 있거나, 스택의 마지막 값과 지금 숫자가 다르면
      stack.push(num);  // 숫자를 스택에 추가
    }
  }
  // 중복 제거한 결과가 스택에 담겨있음
  return stack;
}   

🔄스택 풀이의 동작 방식

  1. stack은 빈 배열로 시작
  2. 배열의 숫자들을 하나씩 확인하면서 스택의 마지막 값과 비교
  3. 스택의 마지막 값과 현재 숫자가 다르면 스택에 추가
  4. 모든 숫자를 확인하고 나면 중복 제거된 값들이 스택에 남음

🧐스택 & 일반 방식의 차이점

  • 스택 방식 : 스택 자료구조 활용해서
    마지막 값만 비교하여 중복 제거
  • 일반 방식 : 단순히 배열과 반복문으로 같은 기능을 구현
profile
안녕하세요! 퍼블리싱 & 프론트엔드 개발 공부 블로그 입니다!

0개의 댓글