🧬알고리즘/Programmers

[JavaScript] 시저 암호

뉴발자 2024. 8. 19.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제

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

 

문자열 s와 거리 n을 매개변수로 주어질 때, s를 n만큼 민 암호문을 만드는 함수를 작성하라.

 

 

조건

 • 공백은 아무리 밀어도 공백이다.

 

 • "z"를 1만큼 밀면 "a"가 된다.

 

 • 문자열 s는 대문자, 소문자, 공백으로만 이루어져 있다.

 

 • s의 길이는 8000 이하이다.

 

 • n은 1이상, 25이하인 자연수이다.

 

 

예시

s (문자열) n (길이) result
"AB" 1 "BC"
"z" 1 "a"
"a B z"    

 

 

나의 풀이

function solution(s, n) {
  const lower = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz".split("");
  const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
    
  return s.split("").map((v) => {
    if(v.charCodeAt() === 32) {
      return v;
    }
    
    if (v.charCodeAt() < 97) {
      return upper[upper.indexOf(v)+n];
    }
    
    return lower[lower.indexOf(v)+n];
  }).join("");
}

 

 

풀이 방법

먼저 lower와 upper 변수를 만들고 a-z, A-Z을 2번 반복해서 넣어줬다.

 

2번 반복한 이유는 끝자리 알파벳에서 n만큼 밀 경우, 다시 처음으로 돌아가야하는 조건때문이다.

 

그리고 받아온 문자열을 split() 함수를 사용해서 배열로 만든 후 map() 함수로 각 원소마다 값을 계산해줬다.

 

charCodeAt() 함수를 사용해서 공백 문자는 그대로 리턴해줬고,

 

ASCII Code의 값이 96 이하 (대문자)인 경우 대문자 문자열(upper)에서 값을 찾아서 반환했고,

 

소문자인 경우 소문자 문자열(lower)에서 값을 찾아서 반환해줬다.

 

변경한 배열을 다시 join() 함수를 사용해서 문자열로 만들어줬다.

 

 

 

 

 

 

 

 

 

 

728x90

댓글