Problem
- You have to write a function printerError which given a string will output the error rate of the printer as a string representing a rational whose numerator is the number of errors and the denominator the length of the control string.
- printer의 에러 비율이 출력되는 함수를 작성한다.
 - 분모는 문자열의 길이이고, 분자는 에러의 개수를 나타낸다.
 - n부터 z까지의 문자를 에러로 간주한다.
 
 - The string has a length greater or equal to one and contains only letters from a to z.
- 문자열의 길이는 1보다 크거나 같고, a부터 z까지의 문자만 포함한다.
 
 
Solution 01
function printerError(str) {
   let count = 0;
   
   for (let i = 0; i < str.length; i++) {
      if (str[i] > 'm') {
         count++;
      }
   }
   return count + '/' + str.length;
}
printerError('aaaaaaaaaa');  // 0/10
printerError('aaaaaaaaan');  // 1/10
printerError('aaaaaaaano');  // 2/10
printerError('aaaaaaanop');  // 3/10
printerError('aaaaaanopq');  // 4/10
printerError('aaaaanopqr');  // 5/10
printerError('aaaanopqrs');  // 6/10
printerError('aaanopqrst');  // 7/10
printerError('aanopqrstu');  // 8/10
printerError('anopqrstuv');  // 9/10
printerError('nopqrstuvw');  // 10/10
Solution 02
function printerError(str) {
   return str.replace(/[a-m]/g, '').length + '/' + str.length;
}
printerError('aaaaaaaaaa');  // 0/10
printerError('aaaaaaaaan');  // 1/10
printerError('aaaaaaaano');  // 2/10
printerError('aaaaaaanop');  // 3/10
printerError('aaaaaanopq');  // 4/10
printerError('aaaaanopqr');  // 5/10
printerError('aaaanopqrs');  // 6/10
printerError('aaanopqrst');  // 7/10
printerError('aanopqrstu');  // 8/10
printerError('anopqrstuv');  // 9/10
printerError('nopqrstuvw');  // 10/10
replace(): 대응되는 문자열을 찾아 다른 문자열로 치환한다.
g: 전역 검색
Solution 03
function printerError(str) {
   return `${str.replace(/[a-m]/g, '').length}/${str.length}`;
}
printerError('aaaaaaaaaa');  // 0/10
printerError('aaaaaaaaan');  // 1/10
printerError('aaaaaaaano');  // 2/10
printerError('aaaaaaanop');  // 3/10
printerError('aaaaaanopq');  // 4/10
printerError('aaaaanopqr');  // 5/10
printerError('aaaanopqrs');  // 6/10
printerError('aaanopqrst');  // 7/10
printerError('aanopqrstu');  // 8/10
printerError('anopqrstuv');  // 9/10
printerError('nopqrstuvw');  // 10/10
Solution 04
function printerError(str) {
   return (str.match(/[n-z]/g) || []).length + '/' + str.length;
}
printerError('aaaaaaaaaa');  // 0/10
printerError('aaaaaaaaan');  // 1/10
printerError('aaaaaaaano');  // 2/10
printerError('aaaaaaanop');  // 3/10
printerError('aaaaaanopq');  // 4/10
printerError('aaaaanopqr');  // 5/10
printerError('aaaanopqrs');  // 6/10
printerError('aaanopqrst');  // 7/10
printerError('aanopqrstu');  // 8/10
printerError('anopqrstuv');  // 9/10
printerError('nopqrstuvw');  // 10/10
match(): 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.
Solution 05
function printerError(str) {
   return (str.match(/[^a-m]/g) || []).length + '/' + str.length;
}
printerError('aaaaaaaaaa');  // 0/10
printerError('aaaaaaaaan');  // 1/10
printerError('aaaaaaaano');  // 2/10
printerError('aaaaaaanop');  // 3/10
printerError('aaaaaanopq');  // 4/10
printerError('aaaaanopqr');  // 5/10
printerError('aaaanopqrs');  // 6/10
printerError('aaanopqrst');  // 7/10
printerError('aanopqrstu');  // 8/10
printerError('anopqrstuv');  // 9/10
printerError('nopqrstuvw');  // 10/10
^: 입력의 시작 부분에 대응
[^]: 문자 클래스 [] 내에서는 not을 의미