어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다.
문자열 s
와 거리 n
을 입력받아 s
를 n
만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한사항
s
는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.s
의 길이는 8000이하입니다.n
은 1 이상, 25이하인 자연수입니다.입출력 예
s | n | result |
---|---|---|
"AB" | 1 | "BC" |
"z" | 1 | "a" |
"a B z" | 4 | "e F d" |
ASCII 코드로 바꾼 뒤, n
만큼 더해주고 다시 문자로 바꿔줬다.
단순히 n
만큼 더해주기만 한다면, s: "I", n: 25
와 s: "a", n: 1
의 결과가 "b"
로 동일할 것이다.
따라서, Z
에서 넘어가면 A
가 되어야 하고, 대문자와 소문자를 나눠서 계산해야 한다.
String.replace() 를 통해 대문자, 소문자 처리를 나눠서 만약 Z
나 z
를 넘어가면 26만큼 빼주도록 했다.
n
은 25 이하의 자연수이므로, Z
를 여러번 넘어가는 경우는 생각하지 않아도 된다.
소스코드
function solution(s, n) {
return s.replace(/[A-Z]/g, (match) => {
let charCode = match.charCodeAt(0)+n;
if (charCode > 90) charCode -= 26;
return String.fromCharCode(charCode);
}).replace(/[a-z]/g, (match) => {
let charCode = match.charCodeAt(0)+n;
if (charCode > 122) charCode -= 26;
return String.fromCharCode(charCode);
});
}