알고리즘 문제풀기 05. 같은 숫자는 싫어

문제 설명

배열 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보다 작거나 같은 정수

입출력 예

어떻게 풀었는가? 🤷‍♀️

배열 속 값은 각각의 인덱스 값을 가지게 되는데, for문을 통해 인덱스 값과 직전의 인덱스 값을 비교해나가면서 배열 속 값이 같지 않으면 answer 이라는 배열에 넣어 출력하게 하였다.

💻 M Y C O D E 💻

function solution(arr) {
  var answer = [];

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] != arr[i - 1]) {
      answer.push(arr[i]);
    }
  }

  return answer;
}

참고하고 싶은 코드 💻

다른 분들이 푼 코드 중 filter 메서드를 사용해서 푼 코드가 눈에 띄였다.

function solution(arr){
  return arr.filter((val,index) => val != arr[index+1]);
}

기록하고 싶은 부분 📃

① arr.filter()

filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]

filter()는 배열 내 각 요소에 대해 한 번 제공된 callback 함수를 호출해, callback이 true로 강제하는 값을 반환하는 모든 값이 있는 새로운 배열을 생성한다.
callback은 할당된 값이 있는 배열의 인덱스에 대해서만 호출되며, 삭제됐거나 값이 할당된 적이 없는 인덱스에 대해서는 호출되지 않는다.
callback 테스트를 통과하지 못한 배열 요소는 그냥 건너뛰며 새로운 배열에 포함되지 않는다.

좋은 웹페이지 즐겨찾기