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