문제
첫 번째 인수로 공백을 포함할 수 있는 문자열을, 두 번째 인수로 숫자 하나를 받는 JavaScript 함수를 작성해야 합니다.
이 함수는 먼저 문자열에서 모든 공백을 제거한 뒤, 두 번째 인수로 전달된 길이를 기준으로 문자열을 여러 개의 청크(chunk)로 나누어야 합니다.
나눠진 모든 청크는 동일한 길이를 가져야 하며, 유일한 예외는 마지막 청크입니다. 남은 문자가 기준 길이보다 적을 경우 마지막 청크는 더 짧은 길이를 가질 수 있습니다.
코드 예시
다음은 이 문제를 해결하는 코드입니다.
const num = 5;
const str = 'This is an example string';
const splitString = (str = '', num = 1) => {
str = str.replace(/\s/g,'');
const arr = [];
for(let i = 0; i < str.length; i += num){
arr.push(str.slice(i,i + num));
};
return arr;
};
console.log(splitString(str, num));
출력 결과
[ 'Thisi', 'sanex', 'ample', 'strin', 'g' ]
코드 설명
위 코드의 동작 과정은 다음과 같습니다.
1. 공백 제거: str.replace(/\s/g, '')는 정규 표현식 /\s/g를 사용하여 문자열 내의 모든 종류의 공백 문자(스페이스, 탭, 줄바꿈 등)를 빈 문자열로 대체합니다.
2. 청크 분할: for 반복문이 인덱스 i를 num씩 증가시키면서 진행되고, 각 단계마다 str.slice(i, i + num)으로 현재 위치부터 num 길이만큼의 부분 문자열을 잘라내어 배열에 추가합니다.
3. 마지막 청크 처리: 문자열의 총 길이가 num으로 나누어떨어지지 않으면, 마지막 반복에서 자동으로 남은 문자들만 잘려서 더 짧은 마지막 청크가 만들어집니다. 별도의 예외 처리가 필요하지 않다는 점이 이 방식의 장점입니다.
결과적으로 위 예제에서는 공백이 제거된 문자열 "Thisisanexamplestring"이 5글자씩 잘려 ['Thisi', 'sanex', 'ample', 'strin', 'g']라는 배열이 반환됩니다.