문자열 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);
}