JavaScript에서 문자열 리터럴로 이루어진 배열을 인수로 받는 함수를 작성해야 합니다. 이 함수는 다음 두 가지 조건을 충족해야 합니다.
- 반복문이 아닌 재귀(recursion) 방식으로 문제를 해결할 것
- 배열의 각 문자열 요소에 대해 첫 번째 단어(첫 글자)를 대문자로 변환할 것
또한 결과를 저장하기 위해 별도의 새로운 배열을 만들지 않고, 기존 배열 자체를 변경(in-place 방식)하여 처리해야 합니다.
예시
예를 들어 입력 배열이 다음과 같다면,
const arr = ['apple', 'banana', 'orange', 'grapes'];
함수 실행 후 배열은 아래와 같이 변환되어야 합니다.
const output = ['Apple', 'Banana', 'Orange', 'Grapes'];
구현 코드
이를 구현한 코드는 다음과 같습니다.
const arr = ['apple', 'banana', 'orange', 'grapes'];
const capitalize = (arr = [], ind = 0) => {
const helper = (str = '') => {
return str[0].toUpperCase() + str.slice(1).toLowerCase();
};
if(ind < arr.length){
arr[ind] = helper(arr[ind]);
return capitalize(arr, ind + 1);
};
return;
};
capitalize(arr);
console.log(arr);코드 설명
코드의 동작 원리를 살펴보면 다음과 같습니다.
- helper 함수: 개별 문자열을 받아 첫 글자는
toUpperCase()로 대문자로 만들고, 나머지 부분은slice(1)로 잘라낸 뒤toLowerCase()로 소문자화하여 반환합니다. - capitalize 함수: 현재 인덱스(
ind)가 배열 길이보다 작은 동안 해당 요소를 helper 함수로 변환한 뒤, 인덱스를 1 증가시키며 자기 자신을 재귀적으로 호출합니다. - 종료 조건: 인덱스가 배열 길이와 같아지면 더 이상 호출하지 않고 종료하며, 모든 처리가 기존 배열 위에서 이루어지므로 추가 메모리 공간을 사용하지 않습니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 'Apple', 'Banana', 'Orange', 'Grapes' ]