문제 정의
이번 글에서는 하나의 문자열을 입력받아 특정 규칙에 따라 변환된 결과를 반환하는 JavaScript 함수를 작성해 보겠습니다.
함수가 문자열을 변환할 때 적용해야 할 규칙은 다음과 같습니다.
- 모든 단어는 대문자로 변환합니다.
- 모든 단어 뒤에는 '!!!!'를 붙입니다.
- 알파벳 'a' 또는 'A'는 '@'로 바꿉니다.
- 그 외의 모든 모음(E, I, O, U)은 '*'로 바꿉니다.
구현 예시
위 규칙을 적용한 코드는 아래와 같습니다.
const str = 'ban censored words';
const maskWords = (str = '') => {
let arr = str.split(' ');
const res = [];
for (let i = 0; i < arr.length; ++i) {
let s = (arr[i].toUpperCase() + '!!!!').split('');
for (let j = 0; j < s.length; ++j) {
if (s[j] == 'A')
s[j] = '@';
if (s[j] == 'E' || s[j] == 'I' || s[j] == 'O' || s[j] == 'U')
s[j] = '*';
}
res.push(s.join(''));
}
return res.join(' ');
};
console.log(maskWords(str));코드 설명
동작 과정을 단계별로 살펴보면 다음과 같습니다.
- split(' ')으로 입력 문자열을 공백 기준으로 나누어 단어 배열을 만듭니다.
- 각 단어에 대해 toUpperCase()로 대문자로 변환한 뒤, 끝에 '!!!!'를 붙입니다.
- 변환된 단어를 한 글자씩 순회하면서 'A'는 '@'로, E/I/O/U는 '*'로 치환합니다.
- 처리가 완료된 각 단어를 결과 배열에 저장하고, 최종적으로 공백으로 연결하여 반환합니다.
출력 결과
B@N!!!! C*NS*R*D!!!! W*RDS!!!!
입력 문자열 'ban censored words'가 위와 같이 대문자화, 느낌표 추가, 모음 치환이 모두 적용된 형태로 출력되는 것을 확인할 수 있습니다.