프로그래머스)없는 숫자 더하기

minji jeon·2022년 7월 17일
0

알고리즘

목록 보기
10/29
post-thumbnail

1. 문제

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

2. 접근

우선 0~9까지의 숫자가 있는 배열을 만들고,
주어진 배열을 오름차순으로 만든뒤
배열요소 하나하나가 일치하는지 확인하고, 없는 숫자는 모두 더해주면 되겠구나라고 생각했다.

하지만 분명 특정요소가 들어가있는지 찾아주는 함수가 있을것이기 때문에
배열의 요소를 찾는 함수를 검색하였더니 includes와 find함수가 나왔다.

find 함수는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환합니다. 그런 요소가 없다면 undefined를 반환한다.
ex) const found = array1.find(element => element > 10);

includes 함수는 배열이 특정 요소를 포함하고 있는지 판별합니다. (boolean타입)

3.내답

우선 find함수는 틀렸다.

function solution(numbers) {
    let result = 0
    for(let i = 0; i <= 9 ; i ++){
        if(!numbers.find((e)=>{e == i})) {   
             result += i;
            return result
        }    
        }}

for반복문을 9까지 반복할때 find함수를 사용하여 i와 같은 값이 없을때를 조건으로 준다.
0~9까지 요소가 없을경우 그 값을 계속더하라고 했으나
답은계속 45가 나왔다.
그 이유는 find는 boolean값이 아니라 그 값을 반환해 주기때문에 조건으로 if문이 성립하지 않았던 것이다.

그래서 includes를 사용해 보았다.

function solution(numbers) {
    let result = 0
    let a = numbers

  
   for(let i=0 ; i< 10 ; i++){
       if(!a.includes(i)){result += i}
   }return(result)  
}

0-9까지 반복할때 i를 반복하고 있지않다면 그수를 더하도록 하였다.
includes는 boolean값을 반환한다.

남의 답

function solution(numbers) {
  return 45 - numbers.reduce((acc, e) => acc + e, 0);
}

여집합과 reduce를 사용한 방법이다. 와우 이건 신선한데..?
우선 45는 1-9까지의 합이다.
이 숫자에서 배열에 있는 값을 모두 빼면 남는값이 나올것이다.
reduce를 활용하면 배열에 있는 모든 값을 더할 수가 있다.

redue함수가 궁금하다면 딸깍
https://velog.io/@mingdolacucudas/reduce-%EB%B0%B0%EC%97%B4%EC%95%88%EC%97%90-%EA%B0%92-%EB%AA%A8%EB%91%90%EB%8D%94%ED%95%98%EA%B8%B0

profile
은행을 뛰쳐나와 Deep Dive in javascript

0개의 댓글