풀이 과정
1.먼저 for문으로 문자열 길이만큼 반복해주고 if문을 써서 공백일경우 공백을 result에 더합니다.
for (let i = 0; i < s.length; i++) { //for문으로 문자열 반복
if (s[i] === " ") result += " ";
2.공백이 아니라면 else문으로 넘어와 s문자열의charCodeAt(i)아스키코드 해당하는 문자를 숫자로 변환해주는 함수를 사용해 변수에 할당해 줍니다.
else { //공백이아닐 경우
let charCode = s.charCodeAt(i);
3.그리고 만약 대문자라면 아스키코드문자를 숫자로 변환해준값에 이동한 길이 만큼을 더해줍니다.
if (charCode <= 90) {
charCode += n;
4.여기서 한번더 if문으로 들어가 아스키코드숫자값이 90을 넘어버리게 되면 Z부터 다시 A로 가야하기 때문에 -26을 아스키코드 숫자값에서 빼줍니다.
if (charCode > 90) charCode -= 26;
5.이제 소문자일 경우에 코드도 작성을 위와 같이 비슷하게 해주고
else {
charCode += n;
// 변경 후 아스키코드값이 122보다 크다면
if (charCode > 122) charCode -= 26;
}
6.마지막으로 숫자로 변환한 아스키코드값을 다시 아스키코드 문자로 바꿔주어야 하기때문에 result값에 문자열로 변경한 아스키코드 값을 넣어주게 되면
result += String.fromCharCode(charCode);
그리고 리턴을 해주게 되면
function solution(s, n) {
let result = "";
for (let i = 0; i < s.length; i++) { //for문으로 문자열 반복
if (s[i] === " ") result += " "; //if문을 써서 공백일경우 공백을 result에 더함
else { //공백이아닐 경우
let charCode = s.charCodeAt(i);// s의 알파벳을 변수에 할당
// 원래 대문자라면
if (charCode <= 90) {
charCode += n;
// 변경 후 아스키코드값이 90보다 크다면
if (charCode > 90) charCode -= 26;
}
// 원래 소문자라면
else {
charCode += n;
// 변경 후 아스키코드값이 122보다 크다면
if (charCode > 122) charCode -= 26;
}
result += String.fromCharCode(charCode);
}
}
return result;
}