문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
🚫제한 사항
1 ≤ my_string의 길이 ≤ 1,000
1 ≤ my_string 안의 자연수 ≤ 1000
연속된 수는 하나의 숫자로 간주합니다.
000123과 같이 0이 선행하는 경우는 없습니다.
문자열에 자연수가 없는 경우 0을 return 해주세요.
❗입출력 예
my_string | result |
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
😀 내가 푼 답
const solution = (my_string) => {
return (my_string.match(/\d+/g) || [])
.map(Number)
.reduce((sum, num) => sum + num, 0);
};
- match
- 문자열에서 정규 표현식과 일치하는 부분을 찾아 배열로 반환하는 문자열 메서드
- const result = string.match(regexp);
- string
검사할 대상 문자열 - regexp
찾을 패턴을 정의하는 정규 표현식
- string
- 반환값
- 일치하는 부분이 있으면 배열을 반환
- 일치하는 부분이 없으면 null을 반환
- 반환값 형태
// 1. 정규 표현식에 g 플래그(전체 검색)가 있을때
// - 문자열 내 일치하는 모든 부분을 배열로 반환함
const str = "abc123def456";
const result = str.match(/\d+/g);
console.log(result); // ["123", "456"]
// 2. 정규 표현식에 g 플래그가 없을 때
// 첫 번째 일치하는 부분만을 반환함
// 이때 반환된 배열에는 추가 정보가 포함됨
const str = "abc123def456";
const result = str.match(/\d+/);
console.log(result);
// ["123", index: 3, input: "abc123def456", groups: undefined]
- 플래그(옵션)
- 정규 표현식에 사용할 수 있는 주요 플래그
- g -> 전역 검색(일치하는 모든 결과를 찾음)
- i -> 대소문자 구분 없이 검색
- m -> 여러 줄 검색
- y -> 문자열의 특정 위치부터 검색
- u -> 유니코드 모드
- 정규 표현식에 사용할 수 있는 주요 플래그
처음에 제출한 답
const solution = (my_string) => {
return my_string
.match(/\d+/g)
.map(Number)
.reduce((sum, num) => sum + num, 0);
};
- math 메서드가 숫자를 찾지 못했을 때 null을 반환해서 런타임 에러 발생
- null이 반환되면 map을 호출하려고 할때 에러가 발생하기 때문에
- math의 결과가 null인지 확인하고 null인 경우엔 빈배열로 처리
😊 문제풀이 답안 OR 다른사람들 답안
function solution(my_string) {
return my_string.split(/\D+/).reduce((acc, cur) => acc + Number(cur), 0);
}
function solution(my_string) {
return my_string.toLowerCase().replace(/[a-z]/g, " ").split(" ").map((v) => v*1).reduce((a,b) => a+b)
}
'공부 > 코딩테스트' 카테고리의 다른 글
Q. 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2024.10.14 |
---|---|
Q. 이차원으로 만들기 (0) | 2024.04.01 |
Q. 중복된 문자 제거 (0) | 2024.04.01 |
Q. 최대값 만들기(2) (0) | 2024.02.26 |
Q. 주사위의 개수 (0) | 2024.02.26 |