상세 컨텐츠

본문 제목

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

프로그래밍 및 언어/코딩 테스트 문제

by 남민우_ 2024. 11. 13. 09:40

본문

문제

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.

예를 들어 "AB" 는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE" 가 됩니다. "z" sms 1akszma alfaus "a" 가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수를 완성해보세요.

제한조건

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000 이하입니다.
  • n은 1이상, 25이하인 자연수입니다.

풀이

문자를 마치 숫자와 같이 처리하기 위해 아스키코드를 활용했다.

 

문자를 숫자로 : myString.charCodeAt();

숫자를 문자로 : String.fromCharCode(myNum);

 

function solution(s, n) {
    var answer = '';
    for(let i = 0; i<s.length; i++)
    {
        if(s[i] === ' ') answer += " ";
        else
        {
            let charCode = s[i].charCodeAt();
            let sizer = charCode >= 65 && charCode <= 90 ? 65 : 97;

            answer += String.fromCharCode((charCode - sizer + n) % 26 + sizer);
        }
    }

    return answer;
}

 

입력받은 문자열 s만큼 반복문을 시행한다.

그 안에서 공백을 유지하기 위해 if 문을 통해 받은 문자가 공백일 경우를 별도로 취급하였고, 문자일 경우에 본격적인 암호화 작업이 들어간다.

요점은 '대문자는 대문자 안에서 밀기, 소문자는 소문자 안에서 밀기' 였다.

해서 각자의 아스키코드 시작번호인 65 와 97을 기준점으로 잡고 이를 sizer 변수에 대입한다.

이후 계산식을 통해 도출된 아스키코드 값을 다시 문자로 변환하여 이를 answer에 더한다.

관련글 더보기