728x90
https://school.programmers.co.kr/learn/courses/30/lessons/86051
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
'내일배움 과제 > 기타 과제' 카테고리의 다른 글
알고리즘 30번 - 가운데 글자 가져오기 (0) | 2024.12.09 |
---|---|
알고리즘 29번 - 제일 작은 수 제거하기 (2) | 2024.12.06 |
알고리즌 27 핸드폰 번호 가리기 (1) | 2024.12.04 |
알고리즘 26번 - 음양 더하기 (0) | 2024.12.03 |
알고리즘 25 - 나누어 떨어지는 숫자 배열 (1) | 2024.12.02 |