[프로그래머스] 같은 숫자는 싫어(feat. Set 중복 처리)

쿼카쿼카·2022년 9월 15일
0

알고리즘

목록 보기
15/67

문제

코드

function solution(arr)
{
    // 내가 푼 풀이
    const newArr = [arr[0]];
    for(let i=1; i<arr.length; i++) {
        if(newArr[newArr.length-1] === arr[i]) continue;
        newArr.push(arr[i]);
    }
    return newArr;
    
    // filter 이용한 풀이
    return arr.filter((n, i) => n !== arr[i+1]);
}

for를 이용한 구식 내가 푼 풀이

  • for문으로 각 index를 돌려 newArr의 마지막 요소와 비교
  • 컴퓨터가 생긴 초창기 사람들이 이렇게 풀지 않았을까 싶다.

filter 이용한 간단풀이

  • filter로 숫자와 index를 받음
  • 현재 숫자와 arr의 다음 index가 같지 않다면 return
  • 마지막 요소는 n과 undefined가 다르기 때문에 true

번외(중복값 제거)

const dupArr = [1, 2, 3, 1, 2];

// new Set 이용
const set = new Set(dupArr);
const uniqueArr = [...set];

// indexOf와 filter 이용
const uniqueArr = dupArr.filter((element, index) => {
    return dupArr.indexOf(element) === index;
});

// forEach와 includes 이용
let uniqueArr = [];
dupArr.forEach((element) => {
    if (!uniqueArr.includes(element)) {
        uniqueArr.push(element);
    }
});

new Set 이용

  • set은 중복값을 허용하지 않음
  • set.add(중복된 값)하면 중복값이기 때문에 추가가 안 됨
  • 단, o={a:1} set.add(o) set.add({a: 1})는 서로 다른 객체를 참조하므로 가능
  • set과 배열은 다르기 때문에 마지막에 ...set 필요

indexOf와 filter 이용

  • indexOf는 가장 빠른 element index만 리턴
  • 첫 index와 맞지 않은 index는 모두 제거

forEach와 includes 이용

  • arr의 모든 요소 비교하여 uniqueArr에 포함되지 않았으면 push

참고 사이트

profile
쿼카에요

0개의 댓글