Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 문자열의 모음·기타 문자와 자음 개수 차이 구하기

문자열을 입력받아 해당 문자열에 포함된 모음과 기타 문자 개수의 합자음의 개수 사이의 차이를 반환하는 함수를 작성해야 합니다.

문제 이해하기

예를 들어 다음과 같은 문자열이 있다고 가정해 보겠습니다.

"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