[JavaScript][Programmers] 시저암호

조준형·2021년 8월 18일
0

Algorithm

목록 보기
75/142
post-thumbnail

🔎 시저 암호

❓ 문제링크

https://programmers.co.kr/learn/courses/30/lessons/12926

📄 제출 코드

function solution(s, n) {
    let lowerAlpha = 'abcdefghijklmnopqrstuvwxyz';
    let upperAlpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    
    let str = s.split('');
    
    let answer = str.map((el)=>{
        if(el == ' ') return ' '
        else{
          let Alpha = lowerAlpha.includes(el) ? lowerAlpha : upperAlpha;
          let idx = Alpha.indexOf(el)+n;
          // console.log(idx);
          idx>=26 ? idx -= 26 : idx = idx;
          return Alpha[idx];
        }
    }).join('');
   return answer;
}
let s = "a B z"
let n = 4
console.log(solution(s, n));

생각보다 애먹었던 문제다.
Alpha를 소문자 대문자 한줄로 해서 index를 찾아서 답을 도출하려했는데 그 경우 z가오면 대문자로 넘어가는 경우가 생겨서 lower과 upper로 나눠서 답을 도출했다.
처음 오답은 공백처리를 해주지않았다. 그래서 ' '의 경우 ' ' 를 return하는 줄을 추가했다.

그리고 애먹었던 부분이 처음엔 for문으로 여러번 돌려서 간단하게 풀었지만 map을 사용해서 한번에 풀고 싶었다. map으로 한번에 사용하려다가 공식문서를 보면서 풀었다.
답은 el이 소문자면 lowerAlpha를 대문자면 upperAlpha에서 몇번째있는지 찾고, z(26)을 넘어가면 넘어간 idx숫자에서 26을 뺀 idx를 구해서 알파벳을 찾았다.

다른 풀이에서 한줄로 푼걸 봤는데 소문자두번 + 대문자두번 + 공백26칸으로 한줄에 풀어놓은 코드가 있었다. 문제에서 n이 1~25라고 되있어서 가능한거 같다.

const Alpha = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ                         '
profile
깃허브 : github.com/JuneHyung

0개의 댓글