문자열을 균등한 하위 문자열로 분리하기
문자열과 숫자 n을 두 개의 인수로 받는 JavaScript 함수를 작성해 보겠습니다. 여기서 숫자 n은 반드시 문자열 길이를 정확히 나누어 떨어지게 하는 값이어야 하며, 함수는 길이가 모두 같은 n개의 문자열을 담은 배열을 반환해야 합니다.
예를 들어 문자열이 "how"이고 숫자가 3이라면 결과는 다음과 같습니다.
[ 'h', 'w', 'o' ]
여기서 각 하위 문자열은 다음 조건을 만족합니다.
- 각 요소는 정확히
(문자열 길이 / n)개의 문자를 포함합니다. - 하위 문자열은 원본 문자열의 첫 글자와 마지막 글자를 번갈아 가며 가져와 구성됩니다.
구현 예시
다음은 전체 코드입니다.
const str = "how";
const num = 3;
const segregate = (str, n) => {
if(str.length % n !== 0){
return false;
}
const len = str.length / n;
const strArray = str.split("");
const arr = [];
let i = 0, char;
while(strArray.length){
if(i % 2 === 0){
char = strArray.shift();
}else{
char = strArray.pop();
};
if(i % len === 0){
arr[i / len] = char;
}else{
arr[Math.floor(i / len)] += char;
};
i++;
};
return arr;
};
console.log(segregate(str, num));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 'h', 'w', 'o' ]
코드 동작 방식
핵심 로직을 단계별로 살펴보면 다음과 같습니다.
- 유효성 검사: 문자열 길이를 n으로 나눈 나머지가 0이 아니라면 균등한 분할이 불가능하므로 false를 반환합니다.
- 분할 준비: 각 하위 문자열의 길이(len)를 계산하고,
split("")으로 문자열을 개별 문자 배열로 변환합니다. - 앞뒤 교차 추출: 반복 횟수(i)가 짝수일 때는 배열 앞에서
shift()로, 홀수일 때는 뒤에서pop()으로 문자를 하나씩 꺼냅니다. - 그룹화: i를 len으로 나눈 몫을 기준으로 해당 인덱스의 배열 요소에 문자를 누적하여 n개의 그룹을 만듭니다.
- 모든 문자를 소진하면 완성된 배열을 반환합니다.