11655 ROT13

minho·2022년 2월 3일
0

문제


코드

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let str = input[0]; //input은 readFileSync로 값을 배열에 저장시키므로 
//[0]을 이용하여 입력받은 string을 str에 저장한다.
let len = str.length;
let answer='';
for(let i=0; i<len; i++){                    
    let tmp = str.charCodeAt(i);
  // 대문자 알파벳
    if(tmp>=65 && tmp<=90){
        if(tmp+13 <= 90){
            answer+=String.fromCharCode(tmp+13);
        }else{                                        
            answer+=String.fromCharCode(tmp-13);
        }    
    }      
  // 소문자 알파벳
    else if(tmp>=97 && tmp<=122){
        if(tmp+13 <= 122){
            answer+=String.fromCharCode(tmp+13);
        }else{
            answer+=String.fromCharCode(tmp-13);
        }    
    }
  // 알파벳 이외의 문자
    else answer+=str[i];                                                                                                
}
console.log(answer);

풀이원리

아스키 코드를 이용한다.

  • charCodeAt()을 이용하여 아스키코드 숫자가 몇인지 알아본다.(대문자 소문자 구분해서 알아본다.)
  • 대문자의 아스키 코드 범위는 65-90, 소문자는 97-122 이다.
  • 아스키코드 숫자에 13을 더해준다.
  • 만약 아스키 코드 +13이 대소문자 각각 90,122를 넘어선다면 -13을 해준다.
    ex) 아스키 코드 숫자가 88일때
    88-x=75 -> x =13
    79-x=66 -> x= 13
  • fromCharCode()를 이용해 아스키 코드를 알파벳으로 바꾸어준다.
  • 알파벳이 제외한 것들은 모두 answer에 붙여준다.
profile
Live the way you think

0개의 댓글