반응형
■ 문제 설명
배열 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 함수를 완성해 주세요.
■ 제한 사항
- 배열 arr의 크기 : 1,000,000 이하의 자연수
- 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수
■ 입출력 예
arr | answer |
[1,1,3,3,0,1,1] | [1,3,0,1] |
[4,4,4,3,3] | [4,3] |
■ 풀이
❌ 틀린 풀이
function solution(arr) {
for(let i=0; i<arr.length; i++) {
if(arr[i] === arr[i+1]) { //arr[i]의 값이 arr[i+1]의 값과 서로 같으면
arr.splice(i, 1); //arr 배열의 i번째부터 1개의 값 삭제(i번째 값 삭제)
i--; //배열이 삭제되면서 뒤에 있던 숫자가 앞으로 당겨오기 때문에 i의 값에 1을 빼줌
}
}
return arr;
}
이렇게 풀었는데 효율성 테스트에서 틀렸다. 왜 틀렸는지 알아보니 배열의 원소를 제거하면 해당 원소의 뒤 원소들을 차례대로 앞으로 당기는 작업을 하는데 배열의 크기가 크면 연산을 많이 하게 된다고 한다.
⭕ 맞는 풀이
function solution(arr) {
const answer = [];
for(let i=0; i<arr.length; i++) {
if(arr[i] !== arr[i+1]) { //arr[i]의 값과 arr[i+1]의 값이 다르면
answer.push(arr[i]); //answer 배열에 arr[i]의 값 삽입
}
}
return answer;
}
반응형
'공부 > 프로그래머스' 카테고리의 다른 글
프로그래머스 레벨 1 최소직사각형 자바스크립트 풀이 (0) | 2022.07.30 |
---|---|
프로그래머스 레벨 1 문자열 내 마음대로 정렬하기 자바스크립트 풀이 (0) | 2022.07.27 |
프로그래머스 레벨1 두 개 뽑아서 더하기 자바스크립트 풀이 (0) | 2022.01.26 |
프로그래머스 레벨1 약수의 개수와 덧셈 자바스크립트 풀이 (0) | 2022.01.21 |
프로그래머스 레벨 1 K번째수 자바스크립트 풀이 (0) | 2022.01.16 |