문제 이해하기
문자열을 하나 입력받아, 자음은 원래의 상대적인 위치를 그대로 유지한 채 모음만 모두 문자열의 끝으로 밀어낸 새로운 문자열을 생성해 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어 'sample string'이 입력으로 주어진다면, 자음인 s, m, p, l, s, t, r, n, g는 기존 순서대로 앞쪽에 배치되고, 모음인 a, e, i는 뒤로 이동해 최종 결과는 'smpl strngaei'가 됩니다.
해결 접근 방식
이 문제는 다음과 같은 단계로 해결할 수 있습니다.
- 자음을 담아둘 변수(front)와 모음을 담아둘 변수(rear), 두 개의 빈 문자열을 준비합니다.
- 입력받은 문자열을 처음부터 끝까지 한 글자씩 순회합니다.
- 현재 글자가 모음이라면 rear에, 그렇지 않다면 front에 추가합니다.
- 순회가 끝나면 front와 rear를 이어 붙여 최종 결과를 반환합니다.
예제 코드
다음은 위 로직을 구현한 코드입니다.
const str = 'sample string';
const moveVowels = (str = '') => {
const vowels = 'aeiou';
let front = '';
let rear = '';
for(let i = 0; i < str.length; i++){
const el = str[i];
if(vowels.includes(el)){
rear += el;
}else{
front += el;
};
};
return front + rear;
};
console.log(moveVowels(str));실행 결과
smpl strngaei
코드 동작 원리
vowels 문자열에는 영문 모음 다섯 개(a, e, i, o, u)가 미리 정의되어 있습니다. 반복문 안에서는 includes() 메서드를 사용해 현재 글자가 모음 목록에 포함되어 있는지 확인합니다. 모음이라면 rear 변수에 차곡차곡 쌓고, 자음이라면 front 변수에 쌓습니다. 이렇게 하면 각 문자들의 상대적인 순서는 그대로 유지됩니다.
마지막으로 front + rear를 반환하면, 자음들은 앞에서 원래 순서대로 배치되고 모음들은 뒤쪽에 모두 모인 새로운 문자열이 완성됩니다.
추가 팁: 대소문자 처리
위 코드는 소문자만 고려하고 있습니다. 대문자 모음도 함께 처리하려면 vowels에 'AEIOU'를 추가하거나, 비교하기 전에 el.toLowerCase()로 현재 글자를 소문자로 변환하면 됩니다.