[백준 | Javascript] 11655

박기영·2022년 9월 6일
0

백준

목록 보기
106/127
post-custom-banner

기초 알고리즘 1/2. 203 - 자료 구조 1(참고)
11655번. ROT13

문제

11655번 문제 링크

solution

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을 남발하는 것은 자제하도록 해야겠다..!
특히나 문자열 입력을 받아서 처리할 때는 조심 또 조심하자.

profile
나를 믿는 사람들을, 실망시키지 않도록
post-custom-banner

0개의 댓글