정수 내림차순으로 배치하기
설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
s | return |
---|---|
"a234" | false |
"1234" | true |
실패 풀이
function solution(s) {
let o = false;
let num = s.match(/\D/g);
for(let i=1; i<s.length; i++) {
if((s.length === 4 || s.length === 6) && num === null){
return o = true
} else {
return false
}
}
}
해설
처음에는 isNaN메소드를 사용해 단순히 문자열인지 아닌지 비교해
출력하려고 했다. 하지만 테스트케이드 11번 13번에서 오류가 발생해
풀지 못했다. 이유를 찾아보았을때 e를 숫자열로 생각해 처리한다고
하였다. 그래서 이번에는 기본적인 정규식문자를 사용하여 처음에
문자열을 전부 추출해서 풀어보았다.. 하지만 테스트케이스 13번에서
계속 오류가 떳다. 생각을 했을때 반복문은 필요 없어 보였다. 조건에는
답이 될 수 있는 경우만 들어가고 정규식으로 이미 문자열은 추출했다.
때문에 반복문으로 여러번 왕복하는 것이 의미가 없기 때문인다. 그 후
성공 했다..
테스트 13번은 어떤 이유인지 아직 파악을 하지못했다 예외가 뭔지좀
알려주십셔.... 하..
성공풀이
function solution(s) {
let o = false;
let num = s.match(/\D/g);
if((s.length === 4 || s.length === 6) && num === null){
return o = true
}
else {
return false
}
}
다른사람 풀이
function solution(s) {
let regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
}
해설
이번에는 정규식을 이요한 풀이를 가져왔다.. 2줄 컷은 너무 탐난다 ..하
정규식..
/~/ : 정규 표현식은 일반적으로 슬래쉬 문자로 감싸진 형태
\: ., []등 특수한 목적으로 사용되는 메타 문자를 문자열에서 찾고 싶을
때, 메타 문자를 문자 그대로 사용할 수 있도록 변환해주는
기호<ㅠㄱ>
.은 모든 문자와 일치하지만, \.의 경우, .의 문자와 일치함
\d : 숫자와 일치함
{n}: 앞에 존재하는 문자가 n번 이상 반복되는 문자와 일치함
^ : 대 괄호 사이에 존재 할 때는 부정, 대괄호 밖에선 문자열의 시작과
일치함
$ : 문자열의 끝과 일치함
| : or의 의미 , 오른쪽과 왼쪽 패턴중 아무 패턴이나 일치한다면 정규식
일치
'프로그래머스' 카테고리의 다른 글
[programmers]나머지가 1이 되는 수 찾기 (1) | 2022.11.09 |
---|---|
[programmers]서울에서 김서방 찾기 (2) | 2022.11.09 |
[programmers]정수 내림차순으로 배치하기 (3) | 2022.11.07 |
[programmers]핸드폰 번호 가리기 (2) | 2022.11.07 |
[programmers]수박수박수박수박수박수? (1) | 2022.11.07 |