저장을 습관화

프로그래머스 LV.1 문자열 다루기 기본 본문

코딩 테스트/프로그래머스 - 자바스크립트

프로그래머스 LV.1 문자열 다루기 기본

ctrs 2023. 9. 29. 17:50

프로그래머스 LV.1 문자열 다루기 기본

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 명

문자열 다루기 기본


2. 문제 설명

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


3. 제한 사항

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

- s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.


4. 예시

s return
"a234" false
"1234" true


5. 기본 제공 코드

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


6. 제출한 내 답

const solution = (s) => {
  return (s.length === 4 || s.length === 6) && !/[a-zA-Z]/.test(s)
    ? true
    : false;
};

 

6-2. VSC에 작성한 내용

const solution = (s) => {
  return (s.length === 4 || s.length === 6) && !/[a-zA-Z]/.test(s)
    ? true
    : false;
};

// 테스트
console.log(solution("a234"));
console.log(solution("1234"));


7. 특이사항

틀렸던 방법

const solution = (s) => {
  return (s.length === 4 || s.length === 6) && +s ? true : false;
};


// 테스트
console.log(solution("a234"));
console.log(solution("1234"));

s를 숫자로 바꾸었을때 NaN이 나온다면 이는 falsy한 값이다.. 를 노려봤는데 안됐다

 

에러가 났던 방법

const solution = (s) => {
  return (s.length === 4 || s.length === 6) && s.includes(/[a-zA-Z]/)
    ? true
    : false;
};

// 테스트
console.log(solution("a234"));
console.log(solution("1234"));
// 터미널

return (s.length === 4 || s.length === 6) && s.includes(/[a-zA-Z]/)
                                                 ^

TypeError: First argument to String.prototype.includes must not be a regular expression
    at String.includes (<anonymous>)
TypeError: First argument to String.prototype.includes must not be a regular expression
TypeError: String.prototype.includes의 첫 번째 인수는 정규 표현식이 아니어야 합니다.

includes에서 문자열은 확인할 수 있으나 정규 표현식은 인수로 넣지 못하더라

그래서 정규표현식.test()를 쓰는 방법을 사용했다.


8. 다른 사람이 작성한 답

8-1. 좋아요를 가장 많이 받은 풀이법

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function alpha_string46(s){
    var regex = /^\d{6}$|^\d{4}$/;

  return regex.test(s);
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log( alpha_string46("a234") );

 

8-2. 내가 틀렸던 방법과 유사항 코드

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function alpha_string46(s) {
   return s.length == 4 || s.length == 6 ? !isNaN(s) : false 
}


// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(alpha_string46("a234"));

문제가 개편되면서 "10e1"과 같은 아스키 코드 형태의 테스트 예제가 추가되었다고한다

이와 같은 경우 NaN인지 아닌지로 검사하기 위해 숫자로 바꾸면 

아스키코드와 일치하는 숫자로 반환되기 때문에 NaN이 아니다 라고 취급된다.

console.log(+"10e1"); // 100
console.log(isNaN("10e1")); // false
console.log(+"10e1" ? true : false); // true