문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
my_string의 길이 ≤ 1,000my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.| my_string | result |
|---|---|
| "aAb1B2cC34oOp" | 10 |
| "1a2b3c4d123" | 16 |
입출력 예 #1
💡 문제풀이 과정
- 답안 1번:
match()와정규식을 사용하여 숫자로 된 문자들을 배열 형태로 만들어reduce((a, b) ⇒ Number(a) + Number(b));로 숫자들의 합계를 리턴한다.match()대신replace()를 이용할 수도 있는데match()는 배열 형태로 값을 리턴하지만,replace()는 문자열 형태로 반환하기에split(””)을 사용하여 배열 형태로 변환하여야 한다. 다음 예제 참고 ⬇️
let my_string = "aAb1B2cC34oOp"; console.log(my_string.match(/\d/g)); // ['1', '2', '3', '4'] console.log(my_string.match(/[0-9]/g)); // ['1', '2', '3', '4'] console.log(my_string.replace(/[^0-9]/g, "")); // 1234 console.log(my_string.replace(/[^\d]/g, "")); // 1234 console.log(my_string.replace(/[^0-9]/g, "").split("")); // ['1', '2', '3', '4']
- 답안 2번:
my_string을 배열 형태로 복사하여filter()를 통해!isNaN(’is Not A Number’ = 숫자인 것)을 찾아 배열로 반환하면reduce()를 이용하여 숫자들의 합계를 낸다.- 답안 3번:
reduce()함수 하나만으로my_string의 문자열에서 숫자들만 찾아내어 합계를 내는 방법이다.reduce((acc, cur) ⇒ (Number(cur) ? acc + +cur : acc), 0);Number(cur)가NaN가 아니면 (=숫자이면)초기값 0에+cur(Number(cur))를 더한다.
✅ 답안 #1
function solution(my_string) {
return my_string.match(/\d/g).reduce((a, b) => Number(a) + Number(b));
}
✅ 답안 #2
function solution(my_string) {
return [...my_string]
.filter((v) => !isNaN(v))
.reduce((a, b) => Number(a) + Number(b));
}
✅ 답안 #3
function solution(my_string) {
return [...my_string].reduce((a, b) => (Number(b) ? a + +b : a), 0);
// return [...my_string].reduce((a, b) => (Number(b) ? a + Number(b) : a), 0);
}