중복된 요소가 존재하지 않도록 배열의 형태를 정리하는 문제.
자료구조의 스택과 큐를 이용하여 답을 도출하고, 시간초과가 나지 않도록 주의해야 한다.
function solution(arr) {
return arr.filter((value, index)=> value !==arr[index+1])
}
arr = [1,1,2,1,1]이라고 가정해보면, index가 0일 때
0번째 인덱스 1 !== 1 ? false
1번째 인덱스 1 !== 2 ? true
2번째 인덱스 2 !== 1 ? true
3번째 인덱스 1 !== 1 ? false
4번째 인덱스 1 !== undefined
filter는 조건이 true인 값만 반환하므로 [1,2,1]이 남는다.
filter() 는 배열 요소에 대해 callback함수를 호출한 뒤, callback함수가 true가 되는 값들을 반환하는 새로운 배열을 생성한다.
callback은 총 3개의 파라미터를 받을 수 있고, 필수/옵션 값으로 이루어진다.
1. value값 - 필수
2. 인덱스 - 옵션
3. 순회 배열 - 옵션
시간초과가 났던 지난번 풀이는 for loop를 활용하고, loop 안에서 push와 shift로 배열을 제어하며 index를 변경하는 로직이었다. log(n)의 시간복잡도를 가지는 for문에서 lon(1)의 시간복잡도를 가지는 push와 shift를 사용하고, 다시금 index의 값을 변경해주니 배열의 크기가 큰 조건에서는 시간초과로 테스트를 통과하지 못했었다.
filter() 함수 역시 모든 엘리먼트를 순회하므로 for loop와 동일하지만 log(n)의 시간복잡도만 가지므로 테스트를 통과한 것 같다.
최근에 알고리즘풀이를 조금 게을리했더니 문제에 대한 감이 많이 떨어진 것 같은 느낌이 든다.
다시 스퍼드를 내야지..! 1일 1문제 !