-
[level1] - 같은 숫자는 싫어programmers/level1 2020. 7. 27. 17:20
문제 설명 :
배열 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 answer [1,1,3,3,0,1,1] [1,3,0,1] [4,4,4,3,3] [4,3] 접근 방법 :
처음에는 문제를 보고 단순히 중복된 수만 없애면 되겠다 싶어서, new Set()을 이용해서 접근했다.
하지만 단순히 중복된 수를 없애는 것이 아니라, 연속적으로 나타나는 숫자가 하나라도 존재하면 그 숫자 하나만 남겨 놓아야 하고, 그리고 그 본래의 배열의 순서 또한 유지해야만 문제를 해결할 수 있어 다른 접근 방식을 생각해보았다.
그래서 생각해보다가, 배열의 모든 항목들을 하나씩 다 비교해서 앞에 항목과 뒤에 항목이 같지 않을 때, 다른 배열에 그 항목을 push()하는 방법 접근해보았다.
마지막에 i = 6 일 때, arr[i] != arr[i+1] 이 부분에서 배열의 항목 이외의 수를 비교하는데 작동하는 이유는 arr[7]을 undefined로 인식하기 때문에 작동하는 것 같다.
내가 짠 코드 :
function solution(arr) { let answer = []; for(let i = 0; i < arr.length; i++){ if(arr[i] != arr[i+1]){ answer.push(arr[i]); } } return answer; }
다른 사람이 짠 인상 깊은 코드 :
function solution(arr) { return arr.filter((val,index) => val != arr[index+1]); }
정말 간단하게 한 줄로 짜주셨다.
접근 방식은 내가 짠 로직과 같은 원리이다.
간단하게 filter()를 이용해서 모든 항목을 비교해서 같지 않은 수만 새 배열의 형태로 반환한 것이다.
이 생각을 했지만, 로직을 못 짜서 반복문을 썼는데...😂
하지만 오늘도 한 수 배웠기 때문에 기분은 좋았다.
'programmers > level1' 카테고리의 다른 글
[level1] - 시저 암호 (0) 2020.09.16 [level1] - Summer/Winter Coding(~2018) 예산 (0) 2020.09.15 [level1] - 약수의 합 (0) 2020.07.25 [level1] - 최대공약수와 최소공배수(유클리드 호제법) (0) 2020.07.24 [level1] - 평균 구하기 (0) 2020.07.21