Problem
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
Solution
첫번째
function solution(arr) {
let answer = [];
while (arr.length > 0){
answer.push(arr.shift());
if(answer[answer.length-2] === answer[answer.length-1]) answer.pop();
}
return answer;
}
그동안 항상 정확성 테스트만 나오다가 효율성 테스트도 있어서 당황스러웠다.
위의 코드는 정확성 테스트는 통과했으나 효율성 테스트는 통과하지 못했다..^^..
스택/큐 문제인데 자료구조 공부를 하지 않고 무작정 풀어서 그런가 싶다.
두번째
내가 첫번째에 짠 코드가 효율성 테스트를 통과하지 못한 이유는 배열에 넣고 빼고를 반복해서 비효율적이기 때문인 거 같다..
그래서 배열에 넣기 전에 if~else if 문으로 검열을 하고 조건에 맞는 것만 새배열에 넣는 식으로 forEach문을 사용하여 새로 알고리즘을 짰다.
function solution(arr) {
let answer = [];
arr.forEach((item, index, a) =>{
if(index === 0) answer.push(item);
else if(a[index - 1] !== item) answer.push(item);
})
return answer;
}
그랬더니 모두 통과!!
정확성 테스트에서 속도도 빨라졌다
다른 풀이를 보니
function solution(arr) {
return arr.filter((val,index) => val != arr[index+1]);
}
filter를 이용하면 새로운 배열을 만들 필요도 없이 한줄로 끝낼 수 있다
'프로그래머스 (JS) > Lv. 1' 카테고리의 다른 글
[Programmers / JS] 12982번 - 예산 (0) | 2023.03.18 |
---|---|
[Programmers / JS] 68935번 - 3진법 뒤집기 (0) | 2023.03.17 |
[Programmers / JS] 12950번 - 행렬의 덧셈 (0) | 2023.03.16 |
[Programmers / JS] 12918번 - 문자열 다루기 (0) | 2023.03.16 |
[Programmers / JS] 77884번 - 약수의 개수와 덧셈 (0) | 2023.03.16 |