[codeWars]VowelsCount

Updated:

문제

Return the number (count) of vowels in the given string. We will consider a, e, i, o, u as vowels for this Kata (but not y). The input string will only consist of lower case letters and/or spaces.

문제해설

인자로 받는 문자열 중 a,e,i,o,u가 포함되면 해당 문자열에 카운트를 반환하는 문제 예로 ‘aei’라는 문자열을 인자로 받는다면, 3이 반환되는 문제

해결방법

case 1

function getCount(str) {
  let vowelsCount = 0
  const vowels = ["a", "e", "i", "o", "u"]
  for(let char of str) {
      if(vowels.includes(char)) {
          vowelsCount++
      }
  }
  return vowelsCount;
}
getCount('aei')

-> 카운트를 세기 위해 vowelsCount 변수를 선언하고 조건에 해당하는 string을 배열로 저장합니다. for of를 이용하여 문자열은 반복하고 includes 매서드를 이용해서 받아온 인자의 “각각의 문자”가 포함이 되는지에 대한 조건을 걸어 포함이 된다면 카운트를 늘려줍니다.

case2

function getCount2(str) {
  var vowelsCount = 0;
  const arrStr = str.split('');
  const vowels = ["a", "e", "i", "o", "u"]
  arrStr.forEach((el) => {
    for(let i = 0; i < vowels.length; i++){
      if(el === vowels[i]){
        vowelsCount++;
      }
    }
  })
  return vowelsCount;
}
getCount('mxya');

-> 해당 받아온 인자를 먼저 split 매서드를 이용하여 배열로 담고, 해당 배열을 forEach를 이용하여 루프를 돌아 줍니다. forEach를 이용하여 각각의 문자를 받아올 수 있게 되었고 콜백 안에서 조건에 해당하는 배열을 for문을 이용해 루프를 돌게 되면 각각 배열에 대해서 비교가 가능 해 집니다. 두 문자열이 같다면 결국 조건배열에 부합하기 때문에 카운트를 늘려서 반환합니다.

배운점

forEach보다는 map을 이용하였는데 배열을 반환하지 않아도 되니 배열을 반복하는 forEach를 이용하는 것이 나쁘지 않겠다는 생각을 했습니다. 새롭게 접근하기 위해 for of문과includes를 이용하는 다양한 접근 방식도 좋았던 거 같습니다.