문제 정의
주어진 알고리즘에 따라 메시지를 변환하는 JavaScript 함수를 작성해야 합니다. 우리가 알고 있는 정보는 오직 해당 메시지에 적용된 암호화 알고리즘뿐이며, 이 알고리즘의 동작을 코드로 구현하는 것이 목표입니다.
알고리즘은 다음 세 단계로 구성됩니다.
- 문자열 뒤집기: 메시지 문자열의 순서를 거꾸로 뒤집습니다.
- ASCII 코드 치환: 모든 영문자를 작은따옴표로 감싼 ASCII 코드 값으로 대체합니다. 예를 들어 A는 '65', h는 '104'가 됩니다.
- 숫자와 공백 유지: 숫자와 공백은 변환 없이 그대로 삽입합니다.
즉, 이 함수는 위 과정을 그대로 수행하여 변환된 결과 문자열을 반환해야 합니다.
예제 코드
다음은 위 알고리즘에 따라 문자열을 변환하는 JavaScript 코드입니다.
const str = '12 hello world 30';
const decryptString = (str = '') => {
const alpha = 'abcdefghijklmnopqrstuvwxyz';
let res = '';
for(let i = str.length - 1; i >= 0; i--){
const el = str[i];
if(alpha.includes(el.toLowerCase())){
res += `'${el.charCodeAt(0)}'`;
}else{
res += el;
};
};
return res;
};
console.log(decryptString(str));
코드 설명
핵심 로직을 단계별로 살펴보면 다음과 같습니다.
- for 루프를 문자열의 마지막 인덱스부터 0까지 역순으로 순회하며 문자열을 뒤집습니다.
- 각 문자가 알파벳(a~z, 대소문자 무관)에 속하는지
includes()메서드로 확인한 뒤, 알파벳이라면charCodeAt()으로 ASCII 코드 값을 구해 작은따옴표로 감싸 결과에 추가합니다. - 숫자나 공백처럼 알파벳이 아닌 문자는 변환 없이 그대로 결과 문자열에 이어 붙입니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
03 '100''108''114''111''119' '111''108''108''101''104' 21
입력 문자열 '12 hello world 30'이 먼저 뒤집혀 '03 dlrow olleh 21' 형태가 되고, 이후 각 알파벳이 ASCII 코드로 치환된 최종 결과를 확인할 수 있습니다. 이처럼 문자열 순회와 charCodeAt() 메서드만 활용하면 별도의 라이브러리 없이도 간단하게 변환 로직을 구현할 수 있습니다.