본문 바로가기
알고리즘

[프로그래머스 / 코딩테스트 연습] 문자열 다루기 기본-자바스크립트(javascript)

by 지 요니 2023. 4. 10.
🎨 문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

🎨 제한 조건
  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
🎨 입출력 예
a return
"a234" false
"1234" true

 

🎨 나의 문제 풀이
  • 처음 문제풀이
function solution(s) {
    var answer;
    if(s.length == 4 || s.length == 6){
        if(isNaN(s)){ //s가 number이 아니면 false 리턴
            answer = false;
        } else {
            answer = true; // number이면 true 리턴
        }
    } else {
        answer = false;
    }
    return answer;
}

제일 먼저 주어진 문자열의 길이가 4 또는 6인지 판단하고, 문자열의 길이가 4나 6일경우, isNaN(is Not a Number)이라는 함수를 이용하여 해당 값이 숫자인지 확인하여 숫자이면 true, 아니면 false를 리턴하였다.

그런데 예상치못하게 오류가 발생하였다..! 

11번 테스트 케이스 실패

테스트케이스 오류내용을 살펴보니 자바스크립트에서 숫제에 e가 붙을 경우 지수 표기법으로 인식하여 문자인 경우에도 숫자로 인식해서 일어나는 오류라고 한다.  이런 테스트케이스까지 내가 생각하고 추가해서 오류를 방지해야한다니.. 😢

  • 오류 적용한 풀이
function solution(s) {
  var answer;
  if (s.length === 4 || s.length === 6) {
    for (let i = 0; i < s.length; i++) {
      if (isNaN(s[i])) return false;
    }
    return true;
  }
  return false;
}

for문을 이용해 s의 인덱스를 하나씩 돌면서 숫자가 아닐 경우 false를 리턴하게 변경하였다!

 

🎨 다른 문제 풀이

👉  정규식 이용

function alpha_string46(s){
    var regex = /^\d{6}$|^\d{4}$/;

  return regex.test(s);
}

숫자6개 or 숫자4개로 구성되어있는지 확인.. 정규식은 생각조차 못해봤는데 풀이보니까 진짜 쉽고 간결하다 

 

🎨 정규표현식
  • 정규표현식: 정규식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용
  • 정규식 메서드
    • ("문자열").match(/정규표현식/플래그): "문자열"에서 "정규표현식"에 매칭되는 항목들을 배열로 반환
    • ("문자열").replace(/정규표현식/, "대체문자열"): "정규표현식"에 매칭되는 항목을 "대체문자열"로 변환
    • ("문자열").split(정규표현식): "문자열"을 "정규표현식"에 매칭되는 항목으로 쪼개어 배열로 반환
    • (정규표현식).test("문자열"): "문자열"이 "정규표현식"과 매칭되면 true, 아니면 false반환
    • (정규표현식).exec("문자열"): match메서드와 유사(단, 무조건 첫번째 매칭 결과만 반환)
  • 정규식 특정 문자 숫자 매칭 패턴
    • \d: 숫자
    • \D: 숫자가 아닌 것
    • 0~9: 숫자(-으로 범위 지정)
    • \s: space 공백
    • \s: space 공백 아닌 것
  • 정규식 검색 기준 패턴
    • |: or
    • [ ]: 괄호 안 문자들 중 하나(or)
    • [^문자]: 괄호안의 문자를 제외한 것
    • ^문자열: 특정 문자열로 시작
    • 문자열$: 특정 문자열로 끝남

 

댓글