기초 알고리즘 1/2. 203 - 자료 구조 1(참고)
11655번. ROT13
const fs = require("fs");
let inputs = fs.readFileSync("/dev/stdin").toString().split(" ");
let ans = [];
for(let i = 0; i < inputs.length; i++){
let input = inputs[i].split("");
let newAns = [];
for(let j = 0; j < input.length; j++){
let originalASCII = input[j].charCodeAt();
let newASCII = originalASCII + 13;
// 대문자, 소문자에만 변화가 있고, 숫자는 그대로 출력된다.
// 아스키코드 값이 65 이상 90 이하라면 대문자이다.
if(originalASCII >= 65 && originalASCII <= 90){
if(newASCII > 90){
// 90이 넘어가면 newASCII에서 90을 뺀 숫자만큼 65부터 다시 시작해야한다.
// newASCII - 90 + 65 - 1을 해줘야 정확하다.
// 예를들어 92가 되어버렸다고 했을 때, 90을 빼면 2가 되어, B가 출력되어야할텐데
// B는 66이므로, 단순하게 2를 더해버리는게 아니라 1을 빼줘야한다.
newASCII = newASCII - 90 + 65 - 1;
}
newAns.push(String.fromCharCode(newASCII));
} else if(originalASCII >= 97 && originalASCII <= 122){
// 아스키코드 값이 97 이상 122 이하라면 소문자이다.
if(newASCII > 122){
newASCII = newASCII - 122 + 97 - 1;
}
newAns.push(String.fromCharCode(newASCII));
} else {
newAns.push(input[j]);
}
}
ans.push(newAns.join(""));
}
console.log(ans.join(" "));
이 간단한 문제를 10번을 시도하게 만든 원인...trim
평소 필자는 입력값 양 옆에 있는 공백을 없애고자 input을 만들 때 trim을 꼭 사용한다.
그런데 웬걸..trim을 지우니까 계속 틀리던데 맞았다.
아무래도 양 끝에 공백이 들어가는 문자열이 존재했었나보다.
아무때나 trim을 남발하는 것은 자제하도록 해야겠다..!
특히나 문자열 입력을 받아서 처리할 때는 조심 또 조심하자.