개발 기록 남기기✍️

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

코딩 테스트 연습

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

너해동물원 2022. 12. 23. 11:15

🗒️ 문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

⚠️ 제한 사항

 

  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.

 

👀 입출력 예

my_string result
"aAb1B2cC34oOp" 10
"1a2b3c4d123" 16

 


❇️ 나의 풀이

  • 문자열을 전개한 뒤, map 함수를 통해 배열 전체를 돌면서 자연수를 찾았다.
  • 문자열을 전개하면, 배열의 값도 모두 문자열 데이터이기 때문에, Number()로 숫자화를 시켜주고, 변환된 값이 NaN인지를 확인한다.
  • NaN이라면 해당 값은 계산하지 않고, NaN이 아니라면 해당 값은 answer에 더해준다.
function solution(my_string) {
    var answer = 0;
    [...my_string].map(v=> Number.isInteger(Number(v)) ? answer += Number(v) : answer);
    return answer;
                       
}

 

✍️ 리뷰

✔️ 다른 사람들의 풀이를 보니 정규표현식을 사용해 문자열 속 문자열 데이터를 모두 빈 값으로 replaceAll 시켰다.

✔️ 그 다음 reduce 함수를 통해 남은 숫자값들을 모두 더해준 값을 반환했다.

✔️ 생각보다 정규표현식을 자주 사용하는 것 같은데, 다 외우지는 못하더라도 자주 사용하는 정규표현식을 찾아보고 정리해야겠다!

 

✔️ ("문자열").replace(/[^0-9]/g, '') : 모든 문자 데이터를 빈 값으로 반환

✔️ reduce((acc, curr) => acc + curr, 0) : acc는 콜백 함수, curr는 배열 값, 0은 초기값

 

 

💟 본받고 싶은 코드

function solution(my_string) {
    const answer = my_string.replace(/[^0-9]/g, '')
                            .split('')
                            .reduce((acc, curr) => acc + Number(curr), 0);
    return answer;
}