배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
제한사항
function solution(arr) {
let answer = [];
const len = arr.length;
answer.push(arr[0]);
for (let j = 0; j < len-1; j++) {
// console.log(arr[j], arr[j+1]);
if (arr[j] !== arr[j+1]) {
answer.push(arr[j+1]);
}
}
return answer;
}
문제 해결 알고리즘 자체는 금방 떠올라서 쉽게 풀 줄 알았다. 코드를 작성하고 예제를 돌려보는데 자꾸 이상한 답이 출력되는 상황이 벌어졌다. 컴퓨터가 거짓말을 하지는 않으니 내 코드가 문젠데.. 뭐가 문젤까 생각해봤다.
역시 컴퓨터를 탓하면 안 된다. 내가 문제다.
처음에 접근한 방법은 기존 arr
의 맨 앞 원소와 그 뒤 원소를 비교해서 같으면 shift()
하고 아니면 answer
에 push()
하는 식으로 생각했다. 이렇게 하다보니 문제가 for loop
에서 일어난다는 것을 깨달았다. 왜냐하면 shift()
하면서 원소가 점점 없어져서 결국엔 undefined
가 되기 때문이다.
문제가 쉬워보인다고 얕보지 말자.