[프로그래머스 | Javascript] 코딩테스트 입문 - 숨어있는 숫자의 덧셈 (2)

박기영·2022년 11월 15일
0

프로그래머스

목록 보기
96/126

solution

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()를 사용해서 숫자형이 아닌 문자들을 제거하는 방식으로 진행하셨다.
필자는 어떻게든 숫자만 남기려고하다가 못 풀었었다...

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글