문제 소개
문자열을 입력받아, 글자 수가 짝수인 단어만 골라 반전(reverse)시키는 자바스크립트 함수를 작성해 보겠습니다. 홀수 길이의 단어는 원래 상태 그대로 유지됩니다.
예를 들어 다음과 같은 문자열이 있다고 가정해 봅시다.
const str = 'This is an example string';
각 단어의 길이를 살펴보면 다음과 같습니다.
- This → 4글자 (짝수)
- is → 2글자 (짝수)
- an → 2글자 (짝수)
- example → 7글자 (홀수)
- string → 6글자 (짝수)
따라서 반전해야 할 대상은 This, is, an, string 네 단어이며, example은 그대로 두게 됩니다.
This is an string
구현 코드
위 문제를 해결하는 전체 코드는 다음과 같습니다.
const str = 'This is an example string';
const isEven = str => !(str.length % 2);
const reverseEvenWords = (str = '') => {
const strArr = str.split(' ');
return strArr.reduce((acc, val) => {
if(isEven(val)){
acc.push(val.split('').reverse().join(''));
return acc;
};
acc.push(val);
return acc;
}, []).join(' ');
};
console.log(reverseEvenWords(str));코드 동작 원리
코드가 어떤 순서로 동작하는지 단계별로 살펴보겠습니다.
- isEven 함수: 단어의 길이를 2로 나눈 나머지가 0인지 확인하여 짝수 여부를 판별합니다.
- split(' '): 문자열을 공백을 기준으로 나누어 단어 배열을 생성합니다.
- reduce(): 배열의 각 단어를 순회하면서 새로운 배열(acc)에 결과를 하나씩 누적합니다.
- 반전 처리: 짝수 길이 단어는
split('').reverse().join('')조합을 통해 글자 순서를 뒤집습니다. - join(' '): 마지막으로 배열을 다시 하나의 문자열로 합쳐 반환합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
sihT si na example gnirts
짝수 길이였던 This → sihT, is → si, an → na, string → gnirts로 반전된 것을 확인할 수 있으며, 홀수 길이인 example은 그대로 유지된 것을 볼 수 있습니다.