프로그래머스 _ 같은 숫자는 싫어(JS/Level.1)
문제
각 원소가 0부터 9까지로 이루어져있는 배열 arr가 주어지고 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거한다
단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야한다
배열 arr에서 연속으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성하세요
ex. arr = [1,1,3,3,0,1,1] 이면 [1,3,0,1]을 return 한다
arr = [4,4,4,3,3] 이면 [4,3]을 return 한다
* 같은 값은 모조리 제거하는 것이 아닌 연속적으로 적혀있는 같은 값만 제거한다
정확성테스트 성공 & 효율성테스트 실패 코드
function solution(arr)
{
let answer = [];
for(let a = 0; a < arr.length; a++)
{
if(arr[a] === arr[a+1])
{
arr.splice(a,1);
a--;
}
}
answer = arr;
return answer;
}
전의 "제일 작은 수 제거하기" 풀이와 비슷하게 비교 후 해당 숫자 삭제 방식으로 풀어봤는데, 정답은 맞지만 효율성 문제에서 시간 초과가 나왔어요
찾아 본 이유로는
splice를 사용하여 배열의 원소를 제거한다면 제거된 원소의 뒷 원소부터 차례대로 앞으로 당기는 작업을 하기 때문에 원소의 수가 많아지게 되면 앞으로 당기는 작업을 하는 과정에서 많은 시간이 소요되게 된다
는 것이였습니다.
최종 제출 코드
그래서 제거하지 않고 새로운 배열에 추가하는 방식으로 코드를 구현해봤습니다.
function solution(arr)
{
let answer = [];
for(let a = 0; a < arr.length; a++)
{
if(arr[a] !== arr[a+1])
answer.push(arr[a]);
}
return answer;
}
제거할 때와 달리 추가할 때는 인덱스 a의 값과 a+1의 값이 동일하지 않은 경우 인접한 원소의 중복값이 없는 것으로 보아 a의 값을 새로운 배열에 추가시킨다
이용했던 메서드
- push : 배열에 새로운 값을 추가하는 메소드
push(추가할 값)을 입력하면 새로운 배열(여기서는 answer)에 값이 추가된다.
풀이를 확인하니 화살표 함수로 풀이하신 분들이 많이 있었는데 이 부분 화살표 함수로도 한번 만들어봐야겠다 !