Problem
- Check to see if a string has the same amount of ‘x’s and ‘o’s.
- 문자열의 ‘x’와 ‘o’가 같은 양인지 확인한다.
- The method must return a boolean and be case insensitive.
- 메소드는 boolean을 반환해야 하고, 대소문자를 구분하지 않는다.
Solution 01
function xo(str) {
let countX = 0;
let countO = 0;
for (let i = 0; i < str.length; i++) {
if (str[i] === 'x' || str[i] === 'X') {
countX++;
}
if (str[i] === 'o' || str[i] === 'O') {
countO++;
}
}
return countX === countO;
}
xo('xo'); // true
xo('oo'); // false
xo('xxxo'); // false
xo('xxOo'); // true
Solution 02
function xo(str) {
str = str.toLowerCase();
return str.split('x').length === str.split('o').length;
}
xo('xo'); // true
xo('oo'); // false
xo('xxxo'); // false
xo('xxOo'); // true
toLowerCase()
: 문자열을 소문자로 변환한다.
split()
: 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.
Solution 03
function xo(str) {
str = str.toLowerCase().split('');
return str.filter(i => i === 'x').length === str.filter(i => i === 'o').length;
}
xo('xo'); // true
xo('oo'); // false
xo('xxxo'); // false
xo('xxOo'); // true
filter()
: 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.
Solution 04
function xo(str) {
let x = str.replace(/x/gi, '');
let o = str.replace(/o/gi, '');
return x.length === o.length;
}
xo('xo'); // true
xo('oo'); // false
xo('xxxo'); // false
xo('xxOo'); // true
replace()
: 대응되는 문자열을 찾아 다른 문자열로 치환한다.
g
: 전역 검색
i
: 대소문자 구문 없는 검색
Solution 05
function xo(str) {
let x = str.match(/x/gi);
let o = str.match(/o/gi);
return (x && x.length) === (o && o.length);
}
xo('xo'); // true
xo('oo'); // false
xo('xxxo'); // false
xo('xxOo'); // true
match()
: 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.