[프로그래머스 level1] 같은 숫자는 싫어

김예지·2021년 10월 9일
1

문제

https://programmers.co.kr/learn/courses/30/lessons/12906


문제 풀이

코드1

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

코드2

filter를 활용하니 엄청나게 간단해졌다! map은 모든 요소에 콜백함수를 실행해서 새로운 배열을 만드는 것이고, filter은 요소 중에 콜백함수의 조건을 만족하는 것만 따로 필터링하는 메소드이다.

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

오류코드

  • 테스트케이스 통과 X
    하나의 요소가 삭제가 되었을 때, 다른 요소의 인덱스가 어떻게 되는지 인덱스를 잘 생각하자!
function solution(arr)
{
    for(let i=0; i<arr.length; i++){
        if(arr[i] === arr[i+1]) arr.splice(i, 1);
    }
    return arr;
}
  • 테스트케이스 통과O, 효율성 X(0점)
    위 코드를 수정하기 위해, for문을 뒤에서부터 돌았다. 하지만 효율성 0점... 문제에서 요구하는 속도보다, 문제 풀이 코드가 느리다는 뜻이다(시간복잡도 큼).
function solution(arr)
{
    for(let i=arr.length; i>=0; i--){
        if(arr[i] === arr[i-1]) arr.splice(i, 1);
    }
    return arr;
}
profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

1개의 댓글

comment-user-thumbnail
2021년 10월 25일

10/25

  • filter가 가장 간단하다!
  • 다양한 방법으로 해보기. 인덱스 잘 생각해서 코드 작성해보기
  • arr=[1, 2, 3]일때, arr[2]===arr[3](없는값)을 비교하면 false가 나온다. 3===undefined를 비교하는것이니까! 따라서, 따로 가장 마지막에 값을 추가해줄 필요없다.
답글 달기