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

JavaScript로 문자열을 n개의 동일한 부분으로 나누는 방법

문자열과 숫자 n을 입력받는 JavaScript 함수를 작성해야 합니다. 단, n은 문자열 전체 길이를 정확히 나눌 수 있는 값이어야 하며, 함수는 문자열을 n개의 동일한 부분으로 나눈 결과를 배열 형태로 반환해야 합니다.

문제 접근 방법

먼저 각 조각의 길이를 구해야 합니다. 문자열 전체 길이를 n으로 나누면 한 조각당 길이를 알 수 있습니다. 그다음 split() 메서드로 문자열을 개별 문자 배열로 변환한 뒤, reduce()를 활용해 문자를 하나씩 모으고 지정된 길이에 도달할 때마다 새로운 조각을 시작하는 방식으로 문제를 해결할 수 있습니다.

예제 코드

const str = 'this is a sample string';
const num = 5;
const divideEqual = (str, num) => {
    const len = str.length / num;
    const creds = str.split("").reduce((acc, val) => {
        let { res, currInd } = acc;
        if(!res[currInd] || res[currInd].length < len){
            res[currInd] = (res[currInd] || "") + val;
        }else{
            res[++currInd] = val;
        };
        return { res, currInd };
    }, {
        res: [],
        currInd: 0
    });
    return creds.res;
};
console.log(divideEqual(str, num));

코드 설명

  • len: 각 조각의 길이입니다. 문자열 길이를 n으로 나눈 값입니다.
  • res: 최종 결과를 담는 배열로, 각 요소가 분할된 문자열 조각입니다.
  • currInd: 현재 채우고 있는 조각의 인덱스입니다.
  • 현재 조각이 비어 있거나 아직 목표 길이(len)에 미치지 못하면 문자를 계속 이어 붙입니다.
  • 조각의 길이가 len에 도달하면 currInd를 1 증가시켜 새로운 조각을 시작합니다.

출력 결과

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

[ 'this ', 'is a ', 'sampl', 'e str', 'ing' ]

위 출력에서 볼 수 있듯이, 길이가 23인 문자열이 각각 정확히 5글자씩(마지막 조각 제외) 균등하게 5개의 부분으로 나뉘어 반환됩니다. 이 방식은 split()reduce()만으로 문자열을 균등 분할할 수 있어 별도의 외부 라이브러리 없이 간단하게 활용할 수 있습니다.