같은 숫자는 싫어

Creating the dots·2021년 10월 8일
0

Algorithm

목록 보기
21/65

프로그래머스

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

나의 풀이 (1)

다음과 같이 풀었더니 효율성 테스트에서 1개가 계속 통과가 되지 않았다. 반복문으로 arr의 모든 요소를 방문하고, output.includes(arr[i]) 때문에 마찬가지로 output의 모든 요소를 방문해야 해서 그런 것 같다.

function solution(arr)
{
    const output = [];
    for(let i=0;i<arr.length;i++){
      if(output.includes(arr[i]) && output[output.length-1]===arr[i]) continue;
      output.push(arr[i])
    }
    return output;
}

나의 풀이 (2)

반복문을 사용하지 않고 reduce를 사용하니 효율성 테스트도 모두 통과했다. 처음에는 else블록을 쓰지 않아서 몇몇 케이스를 통과하지 못했는데, else {return acc}를 통해 acc===cur인 경우는 output에 push하지 않고, 반복실행을 하도록 만들어주었다.
참고로 else {continue}를 쓰니까 SyntaxError [Error]: Illegal continue statement: no surrounding iteration statement가 발생했다.

function solution(arr)
{
    const output = [];
     arr.reduce((acc,cur)=>{
       if(acc!==cur) {
           output.push(cur); 
           return cur;
       }else{
           return acc;
       }
    },-1);
    return output;
}

다른 사람 풀이

정답으로 리턴할 배열에는 연달아 나오는 숫자들 중 하나만 포함되어야한다. 따라서 여기서는 filter 메소드를 써서 val !== arr[index+1], 즉 현재 값과 다음값이 다른 경우에만 새로운 배열에 넣어주었다.

function solution(arr)
{
    return arr.filter((val,index) => val !== arr[index+1]);
}
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글