프로그래머스
다음과 같이 풀었더니 효율성 테스트에서 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;
}
반복문을 사용하지 않고 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]);
}