validatePIN.js (7kyu 21)

Codewars 알고리즘 풀이


Problem

  • ATM machines allow 4 or 6 digit PIN codes and PIN codes cannot contain anything but exactly 4 digits or exactly 6 digits.
    • ATM 기계는 정확히 4 또는 6자리 PIN 코드를 사용한다.
  • If the function is passed a valid PIN string, return true, else return false.
    • 함수에 유효한 PIN 문자열이 전달되면 true를 반환하고, 그렇지 않으면 false를 반환한다.


Solution 01

function validatePIN(str) {
   if (str.length !== 4 && str.length !== 6) {
      return false;
   }
   
   for (let i = 0; i < str.length; i++) {
      if (str[i] < '0' || str[i] > '9') {
         return false;
      }
   }
   return true;
}

validatePIN('1234');    // true
validatePIN('12345');   // false
validatePIN('123456');  // true
validatePIN('-234');    // false
validatePIN('.234');    // false
validatePIN('a234');    // false


Solution 02

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

validatePIN('1234');    // true
validatePIN('12345');   // false
validatePIN('123456');  // true
validatePIN('-234');    // false
validatePIN('.234');    // false
validatePIN('a234');    // false

^: 입력의 시작 부분에 대응

$: 입력의 끝 부분에 대응

|: or

{n}: 앞의 문자열이 정확히 n번 나타나는 부분에 대응

test(): 대응되는 문자열이 있는지 검색하고, true/false를 반환한다.


Solution 03

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

validatePIN('1234');    // true
validatePIN('12345');   // false
validatePIN('123456');  // true
validatePIN('-234');    // false
validatePIN('.234');    // false
validatePIN('a234');    // false

\d: 숫자에 대응


Solution 04

function validatePIN(str) {
   return /^(\d{4}|\d{6})%/.test(str);
}

validatePIN('1234');    // true
validatePIN('12345');   // false
validatePIN('123456');  // true
validatePIN('-234');    // false
validatePIN('.234');    // false
validatePIN('a234');    // false


Solution 05

function validatePIN(str) {
   const isCorrectLength = str.length === 4 || str.length === 6;
   const isCorrectNumber = str.match(/^\d+$/);
   
   if (isCorrectLength && isCorrectNumber) {
      return true;
   }
   return false;
}

validatePIN('1234');    // true
validatePIN('12345');   // false
validatePIN('123456');  // true
validatePIN('-234');    // false
validatePIN('.234');    // false
validatePIN('a234');    // false

match(): 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.

+: 1회 이상 연속으로 반복되는 부분에 대응