const solution = (s,n) => {
const lowerCase = 'abcdefghijklmnopqrstuvwxyz';
const upperCase = lowerCase.toUpperCase();
return [...s].map((x) => {
if(x === ' ') return x;
let isUpper = lowerCase.indexOf(x) === -1;
let index = isUpper ? upperCase.indexOf(x) : lowerCase.indexOf(x);
let newIndex = (index + n) % 26;
return isUpper ? upperCase[newIndex] : lowerCase[newIndex];
}).join('');
}
lowerCase : 소문자 a~z
upperCase : 대문자 A~Z
s를 배열로 만들어서 순회를 한다.
만약 현재 요소가 공백이라면 요소를 바꾸지 않는다.
현재 요소가 대문자인지 소문자인지 파악한다.
대문자라면 upperCase에서 소문자라면 lowerCase에서 해당 요소가 몇번째 있는지 찾는다.
그 인덱스에 n을 더하고 이 값을 알파벳 개수인 26으로 나눈 뒤, 그 나머지를 새로운 인덱스로 잡는다.
대문자라면 upperCase에서, 소문자라면 lowerCase에서 바로 위에서 구한 새로운 인덱스 값으로 현재 요소를 바꿔준다.
순회를 마치고 배열을 문자열로 바꾼뒤 반환한다.