[TIL] 시저 암호

yeols·2023년 11월 14일
1

[TIL]

목록 보기
34/72

시저 암호

문제 설명

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

입출력 예

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

문제 풀이

function solution(s, n) {
  // 공백은 항상 공백
  if (s === "") return "";

  // 문자열을 배열로 바꿈
  let strArr = s.split("");
  return strArr
    .reduce((acc, cur) => {
      if (cur === " ") {
        acc.push(" ");
      } else {
        // 대문자 확인
        let regexp = new RegExp("[A-Z]", "g");
        let type = cur.match(regexp);
        let temp = type
          ? cur.toLowerCase().charCodeAt() + n
          : cur.charCodeAt() + n;
        acc.push(
          type
            ? String.fromCharCode((temp-97)%26 + 97).toUpperCase()
            : String.fromCharCode((temp-97)%26 + 97)
        );
      }
      return acc;
    }, [])
    .join("");
}

문자를 특정 수만큼 이동시키는 방법은 문자를 그에 해당하는 유니코드 숫자로 변환하고,
이 숫자에 이동할 거리(n)를 더해 새로운 문자로 만든다.
이 방법의 핵심은 알파벳 순환 처리인데, 이동한 문자가 알파벳 범위를 넘어갈 경우,
다시 알파벳의 시작으로 돌아가야한다.
예를 들어, 소문자 알파벳의 유니코드 범위는 97(a)부터 122(z)까지이며,
이 범위를 넘어갈 경우 97(a)의 유니코드 값으로 돌아와 순환된다.
97을 뺀 후, 알파벳의 총 개수인 26으로 나머지 연산을 함으로써 구현한다.
"AB"를 1만큼 이동시키면 "BC"가 되고, "a B z"를 4만큼 이동시키면 "e F d"가 됩니다.
이 방법은 간단하지만 효과적인 문자 기반 암호화 기법으로, 문자들을 쉽게 이동시키면서도 알파벳의 범위 내에서 순환시킬 수 있습니다.

profile
흠..

0개의 댓글

관련 채용 정보