반응형
[풀이]
function solution1(arr){
const result = [];
for(let i = 0; i <= arr.length; i++){
if(arr[i] !== arr[i+1]) result.push(arr[i]);
}
return result;
}
function solution2(arr){
return arr.filter((x, idx) => x !== arr[idx+1]);
}
solution 01
1. for문을 통해서 arr의 인덱스값을 다음 인덱스값과 비교했을 때 다르면 그 값을 다시 result 변수 안에 넣어준다.
solution 02
1. filter 함수를 이용해서 위와 같이 풀어주면 끝!
[코드 리뷰]
function solution(arr) {
const result = [];
for (const el of arr) {
const lastElement = result[result.length - 1];
if (lastElement !== el) result.push(el);
}
return result;
}
스택/큐 를 이용해서 풀어야 했던 문제이다.
stack 역할을 하는 result라는 변수를 만들어 푼 풀이이다.
스택/큐 공부하고 다시 풀어야 할 듯.. (다음글에 정리)
+ 스택/큐 공부 후 풀이 정리
1. 스택 역할을 하는 result 변수 만들기
2. for...of를 이용해 arr를 순회하기
예시) arr = [1, 1, 3, 3, 0, 1, 1]
lastElement = result[result.length - 1] 의 뜻은 result 스택의 마지막 요소를 의미한다.
만약 result 배열이 [1, 2, 3, 4, 5] 라고 할 때 result.length = 5 이고 마지막요소는 result[4] = 5 이다.
따라서 lastElment는 result 배열의 마지막 요소를 변수로 설정한 것이다.
if문 조건에서 마지막 요소가 arr의 요소와 다르면 result 배열에 요소를 추가해준다.
result | el of arr | lastElement | result |
[] | 1 | null | [1] |
[1] | 1 | 1 | [1] |
[1] | 3 | 1 | [1, 3] |
[1, 3] | 3 | 3 | [1, 3] |
[1, 3] | 0 | 3 | [1, 3, 0] |
[1, 3, 0] | 1 | 0 | [1, 3, 0, 1] |
[1, 3, 0, 1] | 1 | 1 | [1, 3, 0, 1] |
표를 보는 것과 같이 el of arr 와 lastElement를 비교했을 때 다르면 result 배열에 그 값을 push 해주는 것이다.
(같으면 다음으로 넘어감)
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 최소직사각형 (0) | 2022.10.04 |
---|---|
[JS] 이상한 문자 만들기 (0) | 2022.10.02 |
[JS] 최대공약수와 최소공배수 (0) | 2022.09.30 |
[JS] 약수의 개수와 덧셈 (0) | 2022.09.29 |
[JS] 행렬의 덧셈 (1) | 2022.09.26 |