[Programmers]起動パスワード


私の答え

function solution(s, n) {

    let aCode = 'a'.charCodeAt()
    let zCode = 'z'.charCodeAt()
    let ACode = 'A'.charCodeAt()
    let ZCode = 'Z'.charCodeAt()
    console.log(aCode, zCode, ACode, ZCode) //97 122 65 90
    
    let answer = '';

    let sArr = s.split('') // 문자열 s 를 배열로 변환

    sArr.forEach(el => { // 배열을 순회하면서 각 값들을 n씩 밀어내기
        
        let elCode = el.charCodeAt() // 요소의 유니코드
        let elPlusN = elCode + n // 요소의 유니코드에 n을 더한 값 = n만큼 밀어낸 값
        
        // 소문자 범주에 있는 유니코드인 경우
        if (aCode <= elCode && elCode <= zCode) {

            // n을 더한 유니코드가 소문자 범주에서 벗어난다면
            if (elPlusN > zCode) {
                answer += String.fromCharCode(elPlusN - zCode + aCode - 1)

                // n을 더한 유니코드가 소문자 범주라면
            } else {
                answer += String.fromCharCode(elPlusN)
            }

        // 대문자 범주에 있는 유니코드인 경우
        } else if (ACode <= elCode && elCode <= ZCode) {
            
            // n을 더한 유니코드가 대문자 범주에서 벗어난다면 
            if (elPlusN > 90) {
                answer += String.fromCharCode(elPlusN - ZCode + ACode - 1)
                // n을 더한 유니코드가 대문자 범주라면
            } else {
                answer += String.fromCharCode(elPlusN)
            }
        
        // 요소의 유니코드가 소문자/대문자 범주 밖인 경우
        } else {
            answer += ' '
        }

    })
    return answer;
}

問題の説明


1つの文のアルファベットを一定の距離に押します.
使用
これはシーザーのパスワードです.
例えば,ABは1プッシュでBCとなる.
3を押すとDEになります
zは1に等しく、aである.
文字列sと
入力距離n
sをnに設定する関数を完了してください.

せいげんじょうけん


いくら押してもスペースは空いています.
sは、小文字、大文字、スペースのみから構成されます.
sの長さは8000以下です.
nは1以上,25以下の自然数である.

I/O例

s	n	result
AB	1	BC
z	1	a
a B z	4	e F d