문제 이해하기
이번 문제에서는 문자열을 하나 입력받아, 문자열 안에 포함된 모든 모음(a, e, i, o, u)을 자신이 위치한 인덱스 번호(1부터 시작)로 바꾸는 JavaScript 함수를 작성해야 합니다.
예를 들어 문자열의 두 번째 글자가 모음이라면, 그 글자는 숫자 2로 대체되어야 합니다.
코드 구현
다음은 위 문제를 해결하는 전체 코드입니다 −
const str = 'cancotainsomevowels';
const replaceVowels = (str = '') => {
const vowels = 'aeiou';
let res = '';
for(let i = 0; i < str.length; i++){
const el = str[i];
if(vowels.includes(el)){
res += (i + 1);
}else{
res += el;
};
};
return res;
};
console.log(replaceVowels(str));
동작 원리 살펴보기
코드가 어떻게 동작하는지 단계별로 정리하면 다음과 같습니다.
- 먼저 확인 대상인 모음 문자들을 문자열
vowels에 담아둡니다. for반복문을 사용해 문자열의 처음부터 끝까지 각 문자를 하나씩 순회합니다.- 현재 문자가
vowels에 포함되어 있는지includes()메서드로 검사합니다. - 모음이라면 현재 인덱스
i에 1을 더한 값(즉, 1부터 시작하는 위치 번호)을 결과 문자열에 이어 붙입니다. - 모음이 아니라면 원래 문자를 그대로 결과에 추가합니다.
인덱스는 기본적으로 0부터 시작하기 때문에, 사람이 읽기 편한 1부터 시작하는 번호로 만들려면 반드시 (i + 1)처럼 1을 더해주어야 한다는 점을 기억하세요.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −
c2nc5t78ns11m13v15w17ls
결과를 보면 원래 모음이 있던 자리마다 해당 문자의 위치 번호가 들어간 것을 확인할 수 있습니다. 예를 들어 두 번째 글자 a는 2로, 다섯 번째 글자 o는 5로 바뀌었습니다. 시간 복잡도는 문자열을 한 번만 순회하므로 O(n)으로 매우 효율적입니다.