코딩/코딩테스트

[프로그래머스/JS] 시저 암호

이즈99 2024. 5. 30. 10:14
728x90

문제

코드

function solution(s, n) {
    var answer = '';
    let num = 0;
    
    for(let i = 0; i < s.length; i++)
    {
        num = s.charCodeAt(i); 
        
        if(num >= 65 && num <= 90){
                num = num + n;
                
                if(num > 90)
                    {
                        num -= 26;
                    }
            }
            
        else if (num >= 97 && num <= 122) {
            
        num =num + n;
        if (num > 122)
        {
          num -= 26;
        }
            
      }
        answer+= String.fromCharCode(num);

    }
    
    return answer;
}

풀이

우선 기본적으로 아스키 코드에 대한 개념이 있어야하는 문제이다.

아스키코드란?

위의 이미지 표 처럼 문자들을 10진수로 표현한 것을 아스키 코드라고 한다. 이제 받은 문자열을 각각 아스키코드로 바꾸고 얼마나 더해줘야하는지하는 +n을 구해서 다시 문자로 바꿔주면 된다!

charCodeAt 와  fromCharCode

s에 문자열이 "AB"라면, num = s.charCodeAt(0)을 하게 된다면 A에 해당하는 아스키 코드 수인 97이 num에 들어가게 된다. 이제 반대로 숫자를 문자로 바꾸고 싶다면 str = String.fromCharCode(97)을 하게 된다면 A가 str에 들어가게 들어가게 된다. 이것을 이용하여 코드를 짰다. if(num >= 65 && num <= 90) 을 하게 되면 문자가 대문자일 경우에만 해당하는 아스키 코드를 가지고 온다. 여기에 우리가 아스키코드를 받은 num에 +n 을 하게 해주면 해당하는 문자 아스키코드를 받아오는데 이것이 Z를 넘으면 다시 A부터 시작하게 해야하기 때문에 num-26 을 하여서 해당하는 문자에 대문자를 얻어오도록 하였다. 소문자도 마찬가지로 범위를 구하여서 구하고, 마지막에 fromCharCode한 수를 answer에 넣는 식으로 하여 문제를 해결하였다.