본문 바로가기
코딩테스트

[1일1코👨🏻‍💻] Lv.1 시저 암호.js - 프로그래머스

by Jacob93 2020. 10. 12.

2020.10.12

출처 : 프로그래머스

📝문제

시저 암호

✏️해답

function solution(s, n) {
    let answer = '';
    let original = [];
    let result = [];
    let r = [];
    /// 1. ASCII 코드로 변환.
    /// 2. 변환한 값 + n 
    for(let i=0;i<s.length;i++){
        /// 공백인 경우 -1로 치환
        if(s.charAt(i).charCodeAt() == 32){
            original.push(-1);
            result.push(-1);
        }else{
            original.push(s.charAt(i).charCodeAt());
            result.push((s.charAt(i).charCodeAt()+n));    
        }
    }


    /// 3. ASCII 코드값을 다시 문자로 변환
    for (let i=0;i<result.length;i++){
        ///원래 소문자인경우
        /// a = 97, z = 122
        if(original[i]>=97){
            /// z이상인 경우
            if(result[i]>122){
                result[i]=result[i]-122+96;
                r.push(String.fromCharCode(result[i]));
            }
            /// 그외 정상 범위에 있을 경우
            else{
                r.push(String.fromCharCode(result[i]));
            }
        }

        ///원래 대문자인경우
        /// A = 65 , Z = 90
        else if(original[i]>=65 && original[i]<=90){
            /// Z이상인 경우
            if(result[i]>90){
                result[i]= result[i]-90+64;
                r.push(String.fromCharCode(result[i]));
            }
            else{
                r.push(String.fromCharCode(result[i]));
            }
        }
        /// 공백인 경우
        else if(result[i]==-1){
                r.push(" ");
        }
    }
    // console.log(r);
    for(let i=0;i<r.length;i++){
        answer += r[i];
    }
    return answer;
}

// (AB, 1)
// (z, 1)
// (Z, 10)
// (a B z, 4)
// (aBZ, 20)
// (y X Z, 4)

회고🧐

대문자 Z에서 ascii 코드로 바꾼 후 n만큼 이동했을때, 소문자로 인식하는 경우가 생김. 이 부분 주의!

댓글