https://school.programmers.co.kr/learn/courses/30/lessons/12906
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
계속 시도했으나 시간복잡도에서 실패한 코드
function solution(arr)
{
const answer = [];
for(i in arr){
if(i===0){
answer.push(arr[0]);
}else if (answer[answer.length-1]!==arr[i]){
answer.push(arr[i]);
}
}
return answer
}
이게 for문을 돌면서 i가 0인지 계속 불필요하게 확인하는 문제가 있어서, 아래와 같이 변경하였다.
아래 코드에서는 코드 조건은 약간 길어보이지만, 실제로는
i=0인 경우는 1번만 비교하고 이후로는 다시는 비교하지 않음.
function solution(arr)
{
const answer = [];
for(let i = 1; i < arr.length; i++){
if(answer[answer.length-1]!==arr[i]){
answer.push(arr[i]);
}
}
return answer
}
근데 모범답안을 봤는데
function solution(arr)
{
return arr.filter((val,index) => val != arr[index+1]);
}
아..
filter에서 인덱스값을 받아올수가 있구나....
val이 자기 다음꺼랑 다른 경우만 통과시킴..
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Array.prototype.filter() - JavaScript | MDN
filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.
developer.mozilla.org