없는 숫자 더하기 0~9 사이의 숫자가 랜덤의 위치로 랜덤 배열로 주어진다
배열 중에서 없는 숫자들의 합을 리턴해야 하는 문제
처음으로 0~9 모두를 담은 배열을 정해두고 받은 배열과 비교하여 없는 숫자를 더하면 되겠지 라고 생각하고 코드를 작성하였다. 코드를 작성하다가 0~9의 배열은 필요없고
0부터 9까지 그냥 순회 하는 방법으로 수정하게 되었다 .
아래 코드가 내가푼 코드이다
function solution(numbers) {
let answer = numbers.sort((a,b)=>a-b)
answer = new Set(answer)
let result=0;
for(let i =0; i<10; i++){
if(answer.has(i)){
answer.delete(i)
}else{
result += i
}
}
return result;
}
new Set 함수에 대해서 공부 했기에 적용해보았다.
has , delete , add 등등을 쓸수 있어서 그래도 쉽게 접근할수 있었다.
length를 알기 위해서는 size 로 접근해야 한다.
결과는 성공 괜찮게 풀었겠지 하고 다른 사람의 풀이를 구경하러 갔을때
머리가 띵해졌다. 역시 사람들 중에 머리가 비상한 사람들이 많이 있구나 라고 생각하였다
best 다른사람의 풀이
function solution(numbers) { return 45 - numbers.reduce((cur, acc) => cur + acc, 0); }
내 코드 보다 훨씬더 간결하게 한줄로 끝냈다
그렇다! 0~9까지의 수중 없는 값을 더하면 되니 그냥 0~9까지 더하고 그중에서 받은 배열의 수를 더하고 빼면 한번에 계산이 된다. !!!
다른 풀이들은 includes 함수를 사용해서 풀었다.
new Set을 공부하고 풀어서 그런지 나는 저런 로직이 나왔지만 몰랐다면
includes 를 사용했을것 같다.
그래도 다른 방법으로 접근했다는 점에 만족한다.
오늘은 includes에 대해서 공부를 해본다.
new Set의 has 와 같다. 배열에서 값이 포함되어 있는가를 측정한다.
두번째 인자로 fromIndex를 받는데 검색을 시작할 위치를 정할수 있다. 기본값으로 비워두면 0으로 인식한다. 만약 조건의 배열 길이보다 큰수를 입력하였을때는 false를 배출한다.