문제

  • 주어진 문자열에서, 모음의 개수를 반환한다.

풀이 01

function countVowels(str) {
  const vowels = 'aeiouAEIOU`;
  let count = 0;

  for (let i = 0; i < str.length; i++) {
    if (!(vowels.indexOf(str[i] === -1)) {
      count += 1;
    }
  }
  return count;
}

countVowels('abcd');  // 1 (a)
countVowels('ABCD');  // 1 (A)
countVowels('code');  // 2 (o, e)
countVowels('CODE');  // 2 (O, E)
  • indexOf(): 주어진 값이 처음으로 나타나는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.

풀이 02

function countVowels(str) {
  const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
  let count = 0;

  for (let i = 0; i < str.length; i++) {
    for (let j = 0; j < vowels.length; j++) {
      if (str[i] === vowels[j]) {
        count++;
      }
    }
  }
  return count;
}

countVowels('abcd');  // 1 (a)
countVowels('ABCD');  // 1 (A)
countVowels('code');  // 2 (o, e)
countVowels('CODE');  // 2 (O, E)

풀이 03

function countVowels(str) {
  return str.split('').filter(i => 'aeiouAEIOU'.includes(i)).length;
}

countVowels('abcd');  // 1 (a)
countVowels('ABCD');  // 1 (A)
countVowels('code');  // 2 (o, e)
countVowels('CODE');  // 2 (O, E)
  • split(): 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.
  • filter(): 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.
  • includes(): 특정 값이 있는지 확인하고, true/false를 반환한다.

풀이 04

function countVowels(str) {
  return str.replace(/[^aeiouAEIOU]/g, '').length;
}

countVowels('abcd');  // 1 (a)
countVowels('ABCD');  // 1 (A)
countVowels('code');  // 2 (o, e)
countVowels('CODE');  // 2 (O, E)

정규표현식 (RegExp)

  • replace(): 대응되는 문자열을 찾아 다른 문자열로 치환한다.
  • ^: 입력의 시작 부분에 대응
  • g: 전역 검색

풀이 05

function countVowels(str) {
  return (str.match(/[aeiouAEIOU]/g) || []).length;
}

countVowels('abcd');  // 1 (a)
countVowels('ABCD');  // 1 (A)
countVowels('code');  // 2 (o, e)
countVowels('CODE');  // 2 (O, E)
  • match(): 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.