문자열 my_string
이 매개변수로 주어집니다. my_string
은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string
안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
my_string
의 길이 ≤ 1,000my_string
안의 자연수 ≤ 1000my_string | result |
---|---|
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
입출력 예 #1
입출력 예 #2
💡 문제풀이 과정
- 답안 1번: 문자열에
replace()
를 사용하여 숫자를 제외한 모든 알파벳 문자들을 대체하기로 했다my_string.replace(/\D/g, “-”)
하면—-1-2—34—-
이런 식의 문자열로 반환된다.reduce()
를 통해 합계를 내기위하여split(”-”)
하면“-”
는‘’
(빈 값)이 되고, 숫자들만 배열 형태로 남는다. 마지막으로reduce((a, b) ⇒ a + Number(b), 0);
하여 숫자 타입으로 변환 후 합계를 낸다.
- 참고로 \D는 숫자가 아닌 문자들을 뜻하며, replace(/[A-z]/g, "-")처럼 알파벳 대,소문자로 지정해줘도 된다.
- 답안 2번: 사실..
replace()
없이split()
에 정규식을 사용하여 더 간단한 풀이가 가능했다.split(/\D/);
혹은split(/[A-z]/);
하면 숫자를 제외한 문자들은 모두 빈 값이 되기에.. 예시)['', '', '', '1', '2', '', '34', '', '', '']
✅ 답안 #1
let my_string = "aAb1B2cC34oOp";
function solution(my_string) {
return my_string
.replace(/\D/g, "-")
// 숫자를 제외한 모든 문자를 "-"로 대체. 예시: ---1-2--34---
.split("-")
// "-"를 기준으로 분할. 예시: ['', '', '', '1', '2', '', '34', '', '', '']
.reduce((a, b) => a + +b, 0);
// a + Number(b)로 숫자로 타입 변경 후 합계
}
✅ 답안 #2
function solution(my_string) {
return my_string.split(/\D/).reduce((a, b) => a + +b, 0);
}