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

JavaScript로 문자열의 모음과 자음 이동시키기

문제 상황

영어 알파벳으로 이루어진 문자열을 입력받는 JavaScript 함수를 작성해야 합니다. 이 함수는 새로운 문자열을 만들어야 하는데, 규칙은 다음과 같습니다.

  • 모든 자음은 알파벳 순서상 9칸 앞으로 이동합니다. 'z'를 넘어가면 다시 'a'부터 시작합니다.
  • 모든 모음(a, e, i, o, u)5칸 앞으로 이동합니다.

예를 들어 'sample string'이라는 입력이 주어지면, 각 글자가 위 규칙에 따라 변환된 결과가 출력되어야 합니다.

해결 코드

다음은 이 문제를 해결하는 코드입니다.

const str = 'sample string';
const moveWords = (str = '') => {
    str = str.toLowerCase();
    const legend = 'abcdefghijklmnopqrstuvwxyz';
    const isVowel = char => 'aeiou'.includes(char);
    const isAlpha = char => legend.includes(char);
    let res = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(!isAlpha(el)){
            res += el;
            continue;
        };
        let pos;
        const ind = legend.indexOf(el);
        if(isVowel(el)){
            pos = (21 + ind) % 26;
        }else{
            pos = (ind + 9) % 26;
        };
        res += legend[pos];
    };
    return res;
};
console.log(moveWords(str));

코드 설명

코드의 핵심 로직을 단계별로 살펴보겠습니다.

  • 소문자 통일: 대소문자 구분 없이 처리하기 위해 먼저 toLowerCase()로 전체 문자열을 소문자로 변환합니다.
  • 알파벳 참조표: 'a'부터 'z'까지의 문자열을 기준표(legend)로 사용하여 각 글자의 인덱스를 계산합니다.
  • 모음 판별: isVowel 헬퍼 함수로 해당 글자가 모음인지 확인합니다.
  • 자음 처리: 현재 인덱스에 9를 더한 뒤 26으로 나눈 나머지((ind + 9) % 26)를 사용하면, 'z'를 넘어갔을 때 자동으로 'a'부터 다시 시작하는 순환 구조가 됩니다.
  • 모음 처리: 모음은 5칸 이동이므로 (21 + ind) % 26으로 계산합니다. 예를 들어 'v'(인덱스 21)는 (21+21) % 26 = 16이 되어 'q'가 아닌 올바른 위치로 매핑됩니다. 즉, 5칸 앞으로 이동한 것과 동일한 효과를 냅니다.
  • 특수 문자 유지: 공백이나 숫자 등 알파벳이 아닌 문자는 그대로 결과에 추가합니다.

출력 결과

bvvyuz bcadwp

'sample string'의 각 글자가 규칙에 따라 변환되어 위와 같은 결과가 출력됩니다. 이처럼 나머지 연산자(%)를 활용하면 알파벳 순환 이동 문제를 간결하고 효율적으로 해결할 수 있습니다.