본문 바로가기
내일배움 과제/기타 과제

알고리즘 36 - 문자열 다루기 기본

by GREEN나무 2024. 12. 17.
728x90

URL : https://school.programmers.co.kr/learn/courses/30/lessons/12918

JS

문제

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

제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.


계획

숫자로만 구성되어 있는지 확인하기 위해 정수를 더한다.

더한 값이 존재하면 true반환, 아니면 false 반환


참고, 풀이

테스트는 통과했는데 채점은 틀림.

function solution(s) {
    let re = +s + 10;
    return !isNaN(re);
}

이유가 뭐지???

문자길이 빼먹었어!!!

function solution(s) {
  if (s.length === 4 || s.length === 6) {
    let re = +s + 10;
    return !isNaN(re);
  }
  return false;
}

왜 아직 안됨??? 공백 예외처리 해야하네


function solution(s) {
    // 문자열 길이 확인
    if (s.length !== 4 && s.length !== 6) {
        return false;
    }

    // 문자열의 각 문자가 숫자인지 확인
    // 공백 예외처리 추가
    for (let i = 0; i < s.length; i++) {
        if (isNaN(Number(s[i])) || s[i] === ' ') {
            return false;
        }
    }
    return true;
}

 

코드 간략화하기

function solution(s) {
    return (s.length === 4 || s.length === 6) && [...s].every(c => c >= '0' && c <= '9');
}

 

정규식 쓰기

function solution(s) {
  return /^\d{6}$|^\d{4}$/.test(s)
}

 

function solution(s) {
    return /^[0-9]{4}$|^[0-9]{6}$/.test(s);
}

 

 

 ^[0-9]{4}$|^[0-9]{6}$

  • ^: 문자열의 시작을 의미합니다.
  • [0-9]: 숫자 범위를 지정합니다.( \d랑 [0-9]는 동일)
  • {4}: 숫자가 정확히 4자리여야 함을 의미합니다.
  • {6}: 숫자가 정확히 6자리여야 함을 의미합니다.
  • $: 문자열의 끝을 의미합니다.
  • |: 4자리 또는 6자리 조건을 만족하는 경우를 표현합니다.
    따라서 이 정규식은 **"4자리 숫자" 또는 "6자리 숫자"**로만 구성된 문자열을 검증합니다.

.test(s)
   문자열 s가 정규식을 만족하면 true, 그렇지 않으면 false를 반환합니다.


참고

https://velog.io/@songhansol/%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EC%88%AB%EC%9E%90%EB%A7%8C%EC%9C%BC%EB%A1%9C-%EC%9D%B4%EB%A3%A8%EC%96%B4%EC%A0%B8-%EC%9E%88%EB%8A%94%EC%A7%80-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0