시저 암호

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개의 댓글

관련 채용 정보