JS 알고리즘 시저 암호

H_Chang·2023년 11월 16일
1

문제

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한 조건

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

입출력 예

snresult
"AB"1"BC"
"z"1"a"
"a B z"4"e F d"

나의 코드 풀이

function solution(s, n) {
    return s.split("").map(e => {
        if(" " == e) return e;

        return e.toUpperCase().charCodeAt(0) + n > 90 
            ? String.fromCharCode(e.charCodeAt(0)+n-26)
            : String.fromCharCode(e.charCodeAt(0)+n);
    }).join("");
}

암호 해석을 위한 지식 알고가기!

  • charCodeAt() : 문자열중 하나를 선택하여 아스키코드 번호로 변환해주는 함수

  • 아스키(ASCII)란? : 미국 국립 표준 협회(ANSI, American National Standards Institute)에서 표준화한 정교교환용 7비트 부호체계이다. 한마디로 미국정보교환표준부호의 준말이다.

-fromCharCode :  아스키코드번호를 받아 문자열을 구성해주는 함수

코드 풀이 설명

  1. s.split("")는 주어진 문자열을 각각의 문자로 쪼개 배열로 만듭니다.
  2. map() 함수를 사용하여 각 문자에 대해 작업을 수행한다.
  • 먼저, 공백인 경우에는 변환 없이 그대로 반환하고.
  • 그렇지 않은 경우, 대문자인지 확인하고 대문자인 경우 해당 문자의 유니코드 값을 가져온다(charCodeAt()).
  • 그리고 해당 문자를 주어진 숫자 n만큼 밀었을 때, 'Z'를 넘어가면 'A'부터 다시 시작하도록 설정하였다.
  • 조건문을 사용하여 문자를 밀었을 때 'Z'를 넘어가면 'A'로 돌아가도록 조정하고, String.fromCharCode()를 사용하여 해당 유니코드 값을 문자로 변환한다.
  1. join("")은 배열에 있는 모든 문자를 다시 하나의 문자열로 합친다.
profile
프론트 엔드 시작하는 뉴비!

0개의 댓글