[프로그래머스] 문자열 다루기 기본_JavaScript

ne_ol·2022년 1월 17일
0
post-thumbnail

문제 설명

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

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

입출력 예

sreturn
"a1234"false
"1234"true

기본 solution 코드

function solution(s) {
    var answer = true;
    return answer;
}

문제 풀이

//첫 번째 풀이
function solution(s) {
  return s.match(/\d/g).length == 4 || s.match(/\d/g).length == 6 ;
}

//두 번째 팀원님 풀이
function solution(s) {
    var answer = true;
    if (s.length !== 4 && s.length !== 6) {
        answer = false; //일단 s의 길이를 체크하고
    } else {
        const arr = s.split(''); //s를 문자 하나씩 자르고
        arr.forEach(el => { 
            isNaN(el) ? (answer = false) : null; //문자 하나라도 숫자가 아니면 (true) answer = false, 맞으면 null
        });
    }
    return answer;
}

풀이 설명

나의 첫 번째 풀이에서 고려하지 못한 건, s가 "1e11"와 같이 지수형태의 string일 경우, JavaScript가 숫자로 인식한다는 것이다.

사용 함수

  • isNaN(): 어떤 값이 NaN인지 판별, NaN이면 true 반환.
  • .forEach(): 주어진 함수를 배열 요소 각각에 대해 실행
    • arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])

(출처: https://developer.mozilla.org/ko/)


다른 풀이

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

다른 풀이 설명

  1. 사용된 함수
  • RegExp
    • ^: 입력의 시작 부분에 대응, ('뒤에 있는 것 제외하고 찾아라' 라는 뜻도 있음)
      • /^A/ 는 "an A" 의 'A'와는 대응되지 않지만 "An E" 의 'A'와는 대응됨.
    • $: 입력의 끝 부분과 대응
      • /t$/ 는 "eater" 의 't'에는 대응되지 않지만 그러나 "eat" 과는 대응
    • |: or
  • regexp.test(): 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환

(출처: https://developer.mozilla.org/ko/)

  1. 풀이
    6 자리의 숫자가 아니거나 4자리 숫자가 아닌지 s를 테스트 해라.
  1. ^와 $의 이해가 필요
profile
개발되는 중입니다.

0개의 댓글