본문 바로가기
내일배움 과제/기타 과제

알고리즘 28 - 없는 숫자 더하기

by GREEN나무 2024. 12. 5.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/86051

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

JS

문제

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

제한사항
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 원소 ≤ 9
numbers의 모든 원소는 서로 다릅니다.


계획

for과 if문으로 0~9 사이에 numbers에 없는 모든 값을 더하기

filter : 배열에 없는 값 찾기

findIndex: filter 조건만들기

reduce : filter 결과 합


참고, 풀이

0. 0~9를 가지는 배열 oneTo9 선언

1. find: filter 조건만들기

조건을 만족하는 첫 번째 요소 찾기

let arr = [5, 12, 8, 130, 44]; 
let found = arr.find(num => num > 10); 
console.log(found); // 12
numbers.find(num => num  = numE)

3.filter : 배열에 없는 값 찾기( find값이 없는 경우)

조건을 만족하는 요소만 필터링

let numbers = [1, 2, 3, 4]; 
let evens = numbers.filter(num => num % 2 === 0); 
console.log(evens); // [2, 4]
oneTo9.filter( numF  => numbers.find(num => num  = numF) === false );

 

4.reduce : filter 결과 합

뒤에 붙은 0은 acc의 초기값

let numbers = [1, 2, 3, 4]; 
let sum = numbers.reduce((acc, curr) => acc + curr, 0); 
console.log(sum); // 10
oneTo9.filter( numF  => numbers.find(num => num  = numF) === false ).reduce((acc, curr) => acc + curr, 0);

 

 

 

reduce결과 반환하기

--------------------------------------

오류남

numbers.find(num => num  === numF) === undefined
// find의 조건을 ===으로 수정, 
// find는 조건을 만족하는 요소가 없으면 undefined를 반환함.

function solution(numbers) {
    let oneTo9 = [0,1,2,3,4,5,6,7,8,9]
    return oneTo9
        .filter( numF  => numbers
                .find(num => num  === numF) === undefined)
        .reduce((acc, curr) => acc + curr, 0);
}

코드 간략화하기

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

numbers는 값이 중복되지 않는 0~9사이의 값을 가지는 배열인 점을 이용하기

0~9의 합 45에서  numbers.reduce한 값을 빼기


참고 

https://ashen99.tistory.com/365