본문 바로가기
알고리즘

[프로그래머스] 시저 암호

by 맨날개발 2023. 3. 9.

문제 요약

주어진 문장의 알파벳을 일정 거리만큼 밀어서 다른 알파벳으로 변경하는 함수를 만드시오.

  • 예) "AB" 문장을 1만큼 밀면 "BC".

 

나의 생각

"ABCDEFG..." 와 같이 알파벳을 변수로 저장하지 않으면서 시저암호 문제를 구현하려고 하였습니다.
이때 필요한 메서드가 두가지 존재합니다.

  • String.prototype.charCodeAt([index]) : 인덱스에 해당하는 문자의 아스키코드값 반환
  • String.fromCharCode(number) : 아스키코드에 해당하는 문자 반환
function solution(s, n) {
    function getNumber(a) {
        return (a <= 'Z'.charCodeAt() 
            ? ['A', 'Z'] 
            : ['a', 'z'])
            .map(a => a.charCodeAt())
            .map((a, i) => i === 0 ? a : a + 1);
    }

    return s.split('')
        .map(a => a === ' ' ? ' ' : a.charCodeAt())
        .map(v => {
            if (v === ' ') {
                return ' ';
            }

            const [a, z] = getNumber(v);
            return String.fromCharCode((v + n) % z + a * parseInt((v + n) / z));
        })
        .join('');
}