function solution(my_string) {
let stack = [];
let ans = 0;
const stringArr = my_string.split("");
stringArr.forEach((item, index) => {
if(!isNaN(Number(item))){
stack.push(Number(item));
if(isNaN(Number(stringArr[index + 1]))){
ans += Number(stack.join(""));
stack = [];
}
}
})
return ans;
}
주어진 문자열을 쪼갠 뒤 하나하나 확인하는 방법이다.
Number()
를 사용했을 때, NaN
이 아니라면 숫자이므로, 이를 stack
에 저장한다.
뒤에 이어서 오는 문자열이 숫자가 아니라 일반 문자라면,
stack
에 들어있는 숫자를 ans
에 더하고 stack
을 초기화한다.
뒤에 이어서 오는 문자열이 숫자 형식의 문자라면 자릿수가 늘어난(십의 자리, 백의 자리...) 수가 되므로,
stack
에 쌓아놨다가, 더이상 숫자 형식의 문자가 들어오지 않을 경우,
join()
을 통해 하나의 숫자로 만들어준 뒤, ans
에 더해준다.
function solution(my_string) {
return my_string.toLowerCase().replace(/[a-z]/g, " ").split(" ").map((v) => v*1).reduce((a,b) => a+b)
}
필자는 정규식을 사용하려다가 잘 안되서 위 방법으로 했는데, 이 분은 정규식으로 잘 해결하셨다.
replace()
를 사용해서 숫자형이 아닌 문자들을 제거하는 방식으로 진행하셨다.
필자는 어떻게든 숫자만 남기려고하다가 못 풀었었다...