⭐ Lv. 0 - 숨어있는 숫자의 덧셈 (2)
문자열 my_string
이 매개변수로 주어집니다. my_string
은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string
안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
my_string
의 길이 ≤ 1,000my_string
안의 자연수 ≤ 1000my_string | result |
---|---|
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
입출력 예 #1
입출력 예 #2
문자열을 문자 단위로 하나씩 탐색해서 해결할 수도 있겠지만, replace
를 활용해서 풀이하였습니다. replace
는 단순히 문자나 문자열을 넘겨주면 1번만 교체하지만, 정규표현식을 넘겨주면 relaceAll
처럼 문자열 내부의 정규표현식과 일치하는 부분 전체를 변경해줍니다.
첫 풀이는 아래와 같이 작성하였습니다. gi
로 전체 문자열에 대해서 대소문자를 무시하고 a부터 z
까지 영문에 해당하는 연속된 문자열을 공백으로 replace 하였습니다.
이후 공백 기준으로 문자열을 나누고, 공백을 제외한 숫자만 포함된 배열을 저장하여 reduce
를 이용해 배열 원소의 누적합을 계산하였습니다.
function solution(my_string) {
let array = my_string.replace(/[a-z]+/gi, " ").split(" ").filter((cur) => cur !== " ");
return Number(array.reduce((cur, sum) => sum = Number(sum) + Number(cur)));
}
이보다 더 간단한 풀이도 있었습니다.
function solution(my_string) {
return my_string.split(/\D+/).reduce((sum, cur) => sum + Number(cur), 0);
}
split
역시 정규표현식을 기준으로 구분이 가능했습니다. 또한 reduce
의 경우, 초기값을 0으로 설정하면 다음과 같이 더 간결한 코드로 구현이 가능했습니다.