시저 암호

RyuIsangGo🤘·2023년 8월 22일
0

문제

나의코드

const solution = (s,n) => {
    const lowerCase = 'abcdefghijklmnopqrstuvwxyz';
    const upperCase = lowerCase.toUpperCase();
    return [...s].map((x) => {
        if(x === ' ') return x;
        let isUpper = lowerCase.indexOf(x) === -1;
        let index = isUpper ? upperCase.indexOf(x) : lowerCase.indexOf(x);
        let newIndex = (index + n) % 26;
        return isUpper ? upperCase[newIndex] : lowerCase[newIndex];
    }).join('');
}

로직흐름

lowerCase : 소문자 a~z
upperCase : 대문자 A~Z
s를 배열로 만들어서 순회를 한다.
만약 현재 요소가 공백이라면 요소를 바꾸지 않는다.
현재 요소가 대문자인지 소문자인지 파악한다.
대문자라면 upperCase에서 소문자라면 lowerCase에서 해당 요소가 몇번째 있는지 찾는다.
그 인덱스에 n을 더하고 이 값을 알파벳 개수인 26으로 나눈 뒤, 그 나머지를 새로운 인덱스로 잡는다.
대문자라면 upperCase에서, 소문자라면 lowerCase에서 바로 위에서 구한 새로운 인덱스 값으로 현재 요소를 바꿔준다.
순회를 마치고 배열을 문자열로 바꾼뒤 반환한다.

profile
이전 블로그 입니다.

0개의 댓글