문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
1 ≤ numbers의 길이 ≤ 9
0 ≤ numbers의 모든 수 ≤ 9
numbers의 모든 수는 서로 다릅니다
입출력 예
문제풀이
처음 문제 풀이 생각
전체 0 ~ 9 까지의 숫자에 number을 비교하여 없는 것들을 골라내 더하면 되겠구나 라고 생각했다.
당연하겠지만 기본코드도 몰라 헤매다 결국에는 풀이를 보면서 이해하는 방식을 택했다.
function solution(num) {
let answer = 0;
for(let i = 0; i < 10; i++){ //문제에 0~9까지 라고 했으니 10까지 조건을 줬다.
if(!num.includes(i)) { // includes 란 아래 설명 참조
answer += i; // 값을 answer에 넣어 i 만큼 더해준다
}
}
}
includes 란
위에 사진처럼 배열에 있는지 확인하고 값은 trun, false를 반환한다.
고수 풀이
https://hogumachu.tistory.com/4
function solution(numbers) {
return 45 - numbers.reduce((sum, currentValue) => sum + currentValue);
}
쉽게 설명하자면 문제에 주어진 0 ~ 9 를 모두 더한값은 45이며
num으로 받을 수를 모두 더한다음 45에서 빼면 된다. 라고 합니다.
같은 문제를 읽었지만 생각방식이 다른게 신기했고 더욱 간결하게 표현하는것을 보게 된다.
reduce()란 누적 더하기 라고 생각하면 이해가 쉬웠다.
array(num).reduce(function(acc, cur) {
return acc + cur
}
array.reduce((acc, cur) => acc + cur) // 이런식으로 콜백함수를 화살표함수를 사용하면 더 간결해진다.
같은 문제도 다른 방식으로 푸는 모습들을 보며 배워야 겠다는 생각을 했다.
그리고 리플이나 f12 콘솔에서 했을땐 안나오는데 프로그래머스에 돌리면 되는건 ... 왜죠 ? ㅠ