문자열을 입력받아 해당 문자열에 포함된 모음과 기타 문자 개수의 합과 자음의 개수 사이의 차이를 반환하는 함수를 작성해야 합니다.
문제 이해하기
예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.
"HEllo World!!"
이 문자열에는 자음이 7개, 모음이 3개, 그리고 느낌표(!) 같은 기타 문자가 3개 포함되어 있습니다. 따라서 출력 결과는 다음과 같이 계산됩니다.
|7 - (3+3)| = 1
즉, 최종 출력값은 1이 됩니다.
구현 코드
이제 이 함수를 직접 구현해 보겠습니다. reduce() 메서드를 활용하면 문자열을 한 번만 순회하면서 모음과 자음의 개수를 동시에 계산할 수 있습니다.
const str = 'HEllo World!!';
const findDifference = str => {
const creds = str.split("").reduce((acc, val) => {
let { v, c } = acc;
const vowels = 'aeiou';
const ascii = val.toLowerCase().charCodeAt();
if(!vowels.includes(val.toLowerCase()) && ascii >= 97 && ascii <=122){
++c;
}else{
++v
};
return {c,v};
}, {
v: 0,
c: 0
});
return Math.abs(creds.c - creds.v);
}
console.log(findDifference(str))
코드 동작 원리
split("")으로 문자열을 개별 문자 배열로 분리합니다.reduce()를 사용해 각 문자를 순회하며 누적 객체{ v, c }를 갱신합니다.- 문자를 소문자로 변환한 뒤 ASCII 코드 값이 97~122 범위에 있는지 확인하여 알파벳 여부를 판별합니다.
- 알파벳이면서 모음('aeiou')에 포함되지 않으면 자음 카운트(
c)를 증가시키고, 그 외의 경우(모음 또는 기타 문자)는v를 증가시킵니다. - 마지막으로
Math.abs()를 사용해 두 값의 차이에 대한 절댓값을 반환합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
1