문자열 알파벳 인덱스(idx)에서 n만큼 이동하는 암호화
function solution(s, n) {
const lower = "abcdefghijklmnopqrstuvwxyz";
const upper = lower.toUpperCase();
let idx = 0;
let result = "";
for (let i = 0; i < s.length; i++) {
// 문자가 공백일 경우
if (s[i] === " ") {
result += " ";
continue;
}
// 문자가 소문자일 경우
if (s[i] === s[i].toLowerCase()){
idx = lower.indexOf(s[i]);
if (idx + n > 25) {
result += lower[idx + n - 26];
} else {
result += lower[idx + n];
}
// 문자가 대문자일 경우
} else {
idx = upper.indexOf(s[i]);
if (idx + n > 25) {
result += upper[idx + n - 26];
} else {
result += upper[idx + n];
}
}
}
return result;
}
function solution(s, n) {
const lower = "abcdefghijklmnopqrstuvwxyz";
const upper = lower.toUpperCase();
let idx = 0;
let result = "";
for (let i = 0; i < s.length; i++) {
if (s[i] === " ") {
result += " ";
continue;
}
if (s[i] === s[i].toLowerCase()){
idx = lower.indexOf(s[i]);
result += lower[(idx + n) % 26];
} else {
idx = upper.indexOf(s[i]);
result += upper[(idx + n) % 26];
}
}
return result;
}
문제를 분해해서 3문제를 해결하면 풀 수 있습니다
가독성을 위해서 continue
키워드로 해당 문자열 인덱스를 건너뛰었습니다.
if (s[i] === " ") {
result += " ";
continue;
}
// 소문자일 경우
if (s[i] === s[i].toLowerCase()){}
// 대문자일 경우
else{}
두 가지의 풀이방법이 있습니다.
// 25 넘어가는 경우
if (idx + n > 25)
{
result += lower[idx + n - 26];
} // 25 안 넘는 경우
else {
result += lower[idx + n];
}
result += lower[(idx + n) % 26];
암호화한 문자의 인덱스가 알파벳의 길이인 26을 넘어가는 경우
%
연산자를 이용해서 처리합니다.
예를들어 설명하자면 'z' 문자를 1 만큼 암호화할 경우 'a' 문자가 나와야합니다
알파벳에서 'z'는 25번째 인덱스에 위치하고 'a'는 0번째 인덱스에 위치합니다
25 + 1 = 26 의 값을% 26
으로 계산하면 나머지 값인 0이 도출됩니다