한 걸음씩

[프로그래머스][JS] 숨어있는 숫자의 덧셈 (2) 본문

Programmers

[프로그래머스][JS] 숨어있는 숫자의 덧셈 (2)

winter17 2023. 6. 7. 11:48

https://school.programmers.co.kr/learn/courses/30/lessons/120864

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(my_string) {
    // my_string = "aAb1B2cC34oOp"
    let number = '';
    for (str of my_string){
        if (!isNaN(parseInt(str))){ // str을 정수로 변환했을 때 타입이 숫자가 아니라면 ~
            number += str
        }else{
            number += ' '
        }
    }
    // console.log(number)    1 2  34   
    const numberArray = number.split(' ').filter(item => item.length >= 1) // 숫자만 필터링
    // console.log(numberArray) [ '1', '2', '34' ]
    if (numberArray.length === 0){ // 문자열에 자연수가 없는 경우 0을 return 해주세요.
        return 0
    }
    const total = numberArray.map(item => parseInt(item)).reduce((acc, cur) => acc + cur)
    // console.log(total) 37 : 합 구하기
    return total;
}

코드 설명은 주석처리 된 부분을 참고하면 된다.


리뷰

이 문제도 숫자가 두 개 나란히 나오는 경우에 이걸 어떻게 하나로 분리해야 하는지부터 막혀서 한참 걸렸는데

타입 체크 하는 방법을 몰랐었다

! isNaN으로 처리하면 되는 거였다! 숫자가 아닌 부분은 공백으로 처리해 주고 숫자만 있는 문자열 생성!

그리고 '자연수가 없는 경우 0을 return해라'라는 제한사항이 있었는데 이 부분을 읽지 않아서 계속 테스트 8에서 런타임 에러가 발생했고

진짜 거의 한 시간을 고민했는데... 제한 사항을 똑바로 읽지 않아서 예외 처리를 하지 않았던 것,,, 

for문을 돌리면 안 되는 건가 싶어서 정규식 가져다가 해봤는데 그것도 아니고 삽질 오래 했다... 문제를 똑바로 읽자!!!

정규식을 사용하면 코드가 정말 짧아지는데 아직 정규식을 배우지 않아서 pass