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

이민선(Jasmine)·2022년 12월 20일
1
post-thumbnail

나의 코드

function solution(arr){
    let res = [];
 for(let i=0;i<arr.length;i++){
    (arr[i] !== arr[i-1] & arr[i] !== arr[i+1]) || (arr[i] === arr[i+1] & arr[i] !== arr[i-1]) ? res.push(arr[i]) : null;
 }    
    return res;
}

배열에서 나란히 있는 원소끼리 중복될 경우에만 중복 제거하는 문제이다.
나란히 있지 않을 때에는 제거하면 안 되므로 set을 쓸 수 없다.
그래서 나는 or연산자를 생각해서 조건을 2개를 달았다.
1) 이전 원소와도 다음 원소와도 다름 (좌, 우 둘 다와 다르면 빈 배열에 투척)
2) 다음 원소와는 같지만, 이전 원소와는 다를 때 (좌와 다르고 우와 같기 때문에 같은 숫자 한 덩어리의 시작만 빈 배열에 투척)

그런데 filter를 사용하면 훨씬 간단하게 풀수 있다.
filter는 원소 뿐만 아니라 index도 인자로 넣을 수 있기 때문이다.

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

filter를 돌릴 때, 그 다음 index의 원소와 다를 경우만 추출한다.
마지막 원소는 다음 원소가 undefined이므로 다른 경우에 포함되어 함께 추출한다.
⭐️filter를 사용할 때 element 뿐만 아니라 index도 적극 활용하자.

Syntax

// Arrow function
filter((element) => { /* … */ })
filter((element, index) => { /* … */ })
filter((element, index, array) => { /* … */ })

MDN 참고:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

profile
기록에 진심인 개발자 🌿

0개의 댓글