문제 개요
대문자 영어 알파벳으로 구성된 문자열 str을 첫 번째이자 유일한 인수로 받아 처리하는 자바스크립트 함수를 작성해야 합니다.
영어 알파벳과 그리스 문자 사이에는 다음과 같은 매핑 규칙이 주어집니다.
A=α (알파) B=β (베타) D=δ (델타) E=ε (엡실론) I=ι (이오타) K=κ (카파) N=η (에타) O=θ (세타) P=ρ (로) R=π (파이) T=τ (타우) U=μ (뮤) V=υ (입실론) W=ω (오메가) X=χ (카이) Y=γ (감마)
함수는 그리스 문자로 매핑되는 알파벳을 해당 그리스 문자로 교체하고, 매핑이 존재하지 않는 알파벳은 원래의 영어 알파벳을 그대로 유지한 새로운 문자열을 반환해야 합니다.
입력 예시
const str = 'PLAYING';
출력 예시
const output = 'ρlαγιηg';
위 결과에서 P, A, Y, I, N은 각각 ρ, α, γ, ι, η로 변환되었고, 매핑이 없는 L과 G는 소문자 l, g로 유지된 것을 확인할 수 있습니다.
구현 코드
const str = 'PLAYING';
const convertLang = (str) => {
const map = {
a:'α', b:'β', d:'δ', e:'ε',
i:'ι', k:'κ', n:'η', o:'θ',
p:'ρ', r:'π', t:'τ', u:'μ',
v:'υ', w:'ω', x:'χ', y:'γ'
};
return str.replace(/./g, char => {
if (map[char.toLowerCase()]) {
// 대문자인 경우 그리스 문자로 교체
return char === char.toUpperCase()
? map[char.toLowerCase()]
: map[char];
}
// 매핑이 없는 문자는 소문자로 반환
return char.toLowerCase();
});
};
console.log(convertLang(str));
실행 결과
Ρlαγιηg
코드 동작 원리
- 매핑 객체 정의: 영어 소문자 알파벳을 키(key)로, 대응되는 그리스 문자를 값(value)으로 하는 객체
map을 선언합니다. - 문자 단위 순회:
replace()메서드와 정규 표현식/./g를 사용해 문자열의 모든 문자를 한 글자씩 검사합니다. - 대소문자 판별:
char === char.toUpperCase()조건으로 대문자 여부를 확인합니다. 대문자이면서 매핑이 존재하면 그리스 문자로 교체됩니다. - 예외 처리: 매핑 객체에 없는 문자(L, G 등)는
toLowerCase()를 통해 소문자 형태로 그대로 반환됩니다.
이처럼 객체 기반 매핑과 정규 표현식을 조합하면 복잡한 조건문 없이도 간결하게 문자 치환 로직을 구현할 수 있으며, 매핑 객체에 새로운 문자 쌍을 추가하는 것만으로 손쉽게 확장할 수 있습니다.