문제 개요
문자열 사이사이에 섞여 있는 한 자리 숫자들을 모두 찾아 그 합계를 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.
const str = 'gdf5jhhj3hbj4hbj3jbb4bbjj3jb5bjjb5bj3';
이 문자열에는 5, 3, 4, 3, 4, 3, 5, 5, 3이 포함되어 있으며, 이 숫자들을 모두 더하면 35가 됩니다.
구현 예제
이 문제를 해결하는 코드는 다음과 같습니다.
const str = 'gdf5jhhj3hbj4hbj3jbb4bbjj3jb5bjjb5bj3';
const sumStringNum = str => {
const strArr = str.split("");
let res = 0;
for(let i = 0; i < strArr.length; i++){
if(+strArr[i]){
res += +strArr[i];
};
};
return res;
};
console.log(sumStringNum(str));
코드 설명
split("")메서드를 사용해 문자열을 한 글자씩 나눈 배열로 변환합니다.- 단항 더하기(
+) 연산자를 적용해 각 문자를 숫자로 변환합니다. - 알파벳 등 숫자가 아닌 문자는
NaN으로 변환되어 조건문에서 거짓으로 평가되므로 자연스럽게 걸러집니다. - 숫자로 판별된 경우에만 결과 변수에 더해 최종 합계를 계산합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
35
대안 방법: 정규표현식 활용
정규표현식과 reduce 메서드를 조합하면 더욱 간결하게 표현할 수 있습니다.
const sumWithRegex = str =>
(str.match(/\d/g) || []).reduce((sum, num) => sum + Number(num), 0);
console.log(sumWithRegex(str)); // 35
match(/\d/g)는 문자열에서 모든 숫자만 추출한 배열을 반환하며, 이후 reduce로 각 숫자를 누적해 합계를 구합니다. 반복문 없이 함수형 스타일로 처리할 수 있어 가독성이 뛰어납니다.