알고리즘
6. 없는 숫자 더하기 (JavaScript)
프잘백
2022. 1. 14. 19:51
728x90
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ numbers의 길이 ≤ 9
- 0 ≤ numbers의 모든 수 ≤ 9
- numbers의 모든 수는 서로 다릅니다.
입출력 예시

나의 풀이
1) 실패
function solution(numbers) {
var a = 0;
for(let i=0; i<10; i++){
a = numbers.indexOf(i); //.indexOf(n) : 배열에서 n을찾아 몇번째 값인지 출력한다. 배열에 존재하지않으면 -1출력
if(a==-1){
var aaa = []; // 리스트 선언이 반복문 안에 있으므로 반복 되면서 리셋 된다.
aaa.push(i); // .push(a) : a를 리스트에 추가한다.
}
}
const summary = (x, z) => x + z;
return aaa.reduce(summary);
}
배열 선언을 반복문 안에 해서 없는 숫자중 가장 큰숫자만 summary안에 들어가서 실패
2) 성공
function solution(numbers) {
var a ; // 변수 선언
var aaa = []; // 배열 선언
for(let i=0; i<10; i++){
a = numbers.indexOf(i); //.indexOf(n) : 배열에서 n을찾아 몇번째 값인지 출력한다. 배열에 존재하지않으면 -1출력
if(a==-1){
aaa.push(i); // .push(a) : a를 배열에 추가한다.
}
}
const summary = (x, z) => x + z; //합계 함수 만들기 ★reduce★
return aaa.reduce(summary); // 합계 출력
}
모범 답안
function solution(numbers) {
return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}
나도 처음엔 이렇게 접근했는데 정석대로 풀고싶었다!
reduce
.reduce( )에 대해 더 알아보고 싶다.
arr.reduce(callback[, initialValue])
- callback : 배열의 각 요소에 대해 실행할 함수. 다음 네 가지 인수를 가짐
- accumulator : 누산기. 콜백의 반환값을 누적. 콜백의 이전 반환값 또는, 콜백의 첫 번째 호출이면서 initialValue를 제공한 경우에는 initialValue의 값임
- currentValue : 처리할 현재 요소
- currentIndex (Optional) : 처리할 현재 요소의 인덱스. initialValue를 제공한 경우 0, 아니면 1부터 시작
- array (Optional) : reduce()를 호출한 배열
- initialValue (Optional) : callback의 최초 호출에서 첫 번째 인수에 제공하는 값. 초기값을 제공하지 않으면 배열의 첫 번째 요소를 사용. 빈 배열에서 초기값 없이 reduce()를 호출하면 오류 발생
★누적값★이기 때문에 다양하게 활용할 수 있다.
예를 들어보자.
→배열에 속해 있는 수를 [음수의 개수, 양수의 개수] 형식으로 나타낸다.
const numbers = [2, -5, -123, 59, -5480, 24, 0, -69, 349, 3];
const result = numbers.reduce((acc, cur, idx) => {
if(cur < 0){ // 처리할 현재 요소가 음수일 경우
acc[0]++;
}
else if(cur > 0){ // 처리할 현재 요소가 양수일 경우
acc[1]++;
}
return acc;
}, [0,0]);
console.log(result); // [4, 5]
배열 numbers의 모든 요소에 대해 reduce() 함수를 실행한 결과는 다음과 같다.
각각 음수를4개, 양수를 5개 카운트 했다.
reduce는 정말 무궁무진 하다..