printerError.js (7kyu 20)

Codewars 알고리즘 풀이


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을 의미