programmers 코딩테스트 : 문자열 다루기 기본

H·2022년 6월 14일
0

Coding Test

목록 보기
22/26

🔔 문자열 다루기 기본

📢 문제 설명

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

⛔ 제한 사항

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


🔠 통과한 코드

const s = "199a23"; //a1234 : false ( 숫자만, legnth는 4,6 )
function solution(s) {
  let answer = true;

  if (s.length === 4 || s.length === 6) {
    // 문자열의 길이가 4 or 6인 경우
    for (let i = 0; i < s.length; i++) {
      typeof parseInt(s[i]) === "number" && !isNaN(parseInt(s[i]))
        ? (answer = answer)
        : (answer = !answer);
    }
    return answer;
  }
  return !answer;
}
console.log(solution(s));

📌 코드 설명

  1. s의 length를 조건으로한 if문 / 아닌 경우 false
  2. s의 length까지 도는 for문
    1. s[i]를 ParseInt()로 변환 후 type이 Number인지 확인하는 조건
    2. NaN 값이 아닌 조건
    3. 위 조건일 시에만 true

📌 NaN
참고 링크
NaN : Not-A-Number ( 숫자 아님 )
반환하는 연산
1. 숫자로서 읽을 수 없음 (parseInt("어쩌구"), Number(undefined))
2. 결과가 허수인 수학 계산식 (Math.sqrt(-1))
3. 피연산자가 NaN (7 * NaN)
4. 정의할 수 없는 계산식 (0
Infinity)
5. 문자열을 포함하면서 덧셈이 아닌 계산식 ("가" / 3)

📌 NaN 판별
NaN은 다른 모든 값과 비교(==, !=, ===, !==)했을 때 같지 않으며, 다른 NaN과도 같지 않습니다.
NaN의 판별은 Number.isNaN() 또는 isNaN()을 사용하면 제일 분명하게 수행할 수 있습니다.
아니면, 오로지 NaN만이 자기자신과 비교했을 때 같지 않음을 이용할 수도 있습니다.

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

🔠 다른 사람의 코드

나도 처음에는 정규식으로 작성해보려 했는데, 문법이 틀린건지 자꾸 에러가 나서 남의 코드를 참고 해보려 한다.

function alpha_string46(s) {
  let regex = /^\d{6}$|^\d{4}$/;
  return regex.test(s);
}
console.log("alpha_string46", alpha_string46("1234"));

📌 let regex = /^\d{6}$|^\d{4}$/; :

  • /~/ : 정규 표현식은 일반적으로 슬래쉬 문자로 감싸진 형태
  • \: ., []등 특수한 목적으로 사용되는 메타 문자를 문자열에서 찾고 싶을 때, 메타 문자를 문자 그대로 사용할 수 있도록 변환해주는 기호<ㅠㄱ>
    .은 모든 문자와 일치하지만, \.의 경우, .의 문자와 일치함
  • \d : 숫자와 일치함
  • {n}: 앞에 존재하는 문자가 n번 이상 반복되는 문자와 일치함
  • ^ : 대 괄호 사이에 존재 할 때는 부정, 대괄호 밖에선 문자열의 시작과 일치함
  • $ : 문자열의 끝과 일치함
  • | : or의 의미 , 오른쪽과 왼쪽 패턴중 아무 패턴이나 일치한다면 정규식 일치
profile
🤘 돌머리도 ROCK이다! 🤘

0개의 댓글