문자열과 숫자 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()만으로 문자열을 균등 분할할 수 있어 별도의 외부 라이브러리 없이 간단하게 활용할 수 있습니다.