문제
프로그래머스 문자열 다루기 기본 문제에서 정규표현식(regexp)을 사용해
주어진 문자열에서 숫자를 걸러내려고 시도했는데
일부 테스트에서 자꾸 에러가 발생
시도
function solution(s) {
let reg = s.match(/\d/g);
return reg.length === 4 || reg.length === 6 ? true : false
}
원래 문자열 s에서 숫자만 골라내서 길이가 4 또는 6이면 true를 반환하고 아니면 false를 반환하도록 했다.
하지만 실패했다.
다음 시도
function solution(s) {
let reg = s.match(/\d/g) || [];
return reg.length === 4 || reg.length === 6 ? true : false
}
match 메소드를 이용해 문자열 패턴 검색 시 찾을 수 없을 경우 null을 반환하기 때문에 에러가 발생해서
문자열 패턴이 없을 경우 빈 배열을 반환하도록 코드 추가. 하지만 또 실패
해결
function solution(s) {
if (s.length === 4 || s.length === 6) {
let reg = s.match(/\d/g);
return s.length === reg.length ? true : false
} else {
return false
}
}
너무 이상해서 문제를 다시 천천히 읽어보았다. 주어진 문자열 s에서 숫자를 걸러내어 길이가 4 또는 6이 되는 것이 아니라
걸러내기 전 s의 길이가 4 또는 6일 경우 숫자로만 구성된 것을 찾는 것이었다.
알게된 것
문제가 무엇인지 정확히 파악하기
match 메서드를 사용했을 때 결과 값이 없으면 null을 반환.
위의 경우 .length로 접근하면 에러 발생.
필요에 따라 빈 배열을 반환하도록 설정해줘야 함.
정규표현식(regexp)은 / /로 표현 \d는 0부터 9까지의 숫자를 의미
g를 붙이면 전체탐색
'Development > TIL' 카테고리의 다른 글
소수 구하기 (feat.에라토스테네스의 체) (0) | 2023.04.12 |
---|---|
문자열과 영단어 (0) | 2023.04.11 |
N진법 변환 (0) | 2023.04.10 |
다중 배열 (0) | 2023.04.07 |
올바른 TIL 작성에 대해 (1) | 2023.04.07 |