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

JavaScript로 소수 길이의 단어만 반전하기

문제 설명

공백으로 구분된 여러 단어로 이루어진 문자열을 입력받아, 원본 문자열의 모든 단어를 유지하되 길이가 소수(2, 3, 5, 7, 11 등)인 단어만 거꾸로 뒤집어 새로운 문자열을 만드는 JavaScript 함수를 작성해야 합니다.

접근 방법

주어진 숫자가 소수인지 판별하는 헬퍼 함수와 문자열을 반전시키는 헬퍼 함수를 먼저 정의합니다. 그런 다음 문장을 공백 기준으로 분리하고, 각 단어의 길이가 소수인지 확인한 후 조건에 해당하는 단어만 반전시켜 다시 하나의 문자열로 합칩니다.

예시 코드

const str = 'His father is an engineer by profession';
// 헬퍼 함수: 소수 판별
const isPrime = n => {
    if (n === 1){
        return false;
    }else if(n === 2){
        return true;
    }else{
        for(let x = 2; x < n; x++){
            if(n % x === 0){
                return false;
            }
        }
        return true;
    };
};
// 헬퍼 함수: 문자열 반전
const reverseString = str => str.split('').reverse().join('');
// 메인 함수: 소수 길이의 단어만 반전
const reversePrime = str => {
    return str.split(' ').reduce((acc, val) => {
        const { length } = val;
        if(isPrime(length)){
            acc += reverseString(val) + ' ';
        }else{
            acc += val + ' ';
        }
        return acc;
    }, '');
};
console.log(reversePrime(str));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

siH father si na engineer yb profession

코드 동작 방식

isPrime(n) − 1은 소수가 아니므로 false를, 2는 소수이므로 true를 반환합니다. 그 외의 숫자는 2부터 n-1까지 차례대로 나누어 떨어지는 값이 있는지 검사합니다.
reverseString(str) − split('')으로 문자열을 개별 문자 배열로 변환한 뒤 reverse()로 순서를 뒤집고, join('')으로 다시 하나의 문자열로 결합합니다.
reversePrime(str) − split(' ')으로 문장을 단어 단위로 나눈 후 reduce()로 각 단어를 순회합니다. 이때 단어의 길이가 소수일 때만 reverseString()으로 반전시키고, 그렇지 않은 단어는 그대로 결과에 누적합니다.