- charCodeAt()
- String.fromCharCode()
function solution(s, n) {
var result = '';
for(var i = 0; i < s.length; i++) {
// 문자를 유니코드(UTF-16)로 변환
var ASCII = s.charCodeAt(i);
// n만큼 문자를 밀어줌
var answer = ASCII+n
// 띄어쓰기 구별
if(ASCII === 32){
answer = ASCII;
}
// 대문자 구별
else if(s[i] === s[i].toUpperCase() && s[i] !== s[i].toLowerCase()) {
// 유니코드값 90이상이면, Z를 벗어남
if(answer > 90){
answer -= 26;
}
}
// 소문자 구별
else{
// 유니코드값 122이상이면 z를 벗어남
if(answer > 122){
answer -= 26;
}
}
//아스키코드를 다시 문자로 바꿔줌
result += String.fromCharCode(answer);
}
return result;
}
console.log( solution( "a B c D", 25 ) )
// 결과값: "z A b C"
s.charCodeAt(i)
s라는 문자열에서 i번째에 있는 문자를 유니코드로 변환해주는 메소드이다.
나는 문자열 전체를 유니코드로 변환해줘야하기 때문에 for문을 사용해주었다.
원래는 ASCII코드를 사용하려고 했는데 유니코드로 밖에 변환이 안됐다. 하지만 0번부터 127번까지는 유니코드와 아스키코드값이 같다고하니 결과에 크게 상관은 없었다.
String.fromCharCode(answer)
answer에 저장해놓은 유니코드값을 다시 문자로 바꿔주는 함수이다.
String.fromCharCode(num1,[num2, num3,...])
위와같은 형태로 적을 수 있다.
가능한 값의 범위는 0~65535(0xFFFF)까지이고, 초과하는 값은 잘린다.
유효성검사는 하지 않는다고 한다.
앞에 String은 정적 메소드라 첫자를 대문자로 적어줘야한다.
참고
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode