본문 바로가기
알고리즘 스터디/[프로그래머스] 월간 코드 챌린지 시즌1

[알고리즘] 시저 암호 문제풀이(자바스크립트 javascript)

by 제니운 2022. 7. 21.
728x90

👌 대문자와 소문자가 있으므로, 변수로 값을 할당해주면

 

    var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var lower = "abcdefghijklmnopqrstuvwxyz";

 

👌 s의 i번째 자리수를 구해주어야 하므로

 

for(var i =0; i <s.length; i++)

 

👌 s의 i번째 글자를 표현하기 위해 변수를 지정해주면

 

var text = s[i]

 

👌 공백은 계속 공백이라 했으므로

 

if(text == ' ') {

     answer += ' '

     continue 

 

👌 s가 a B z 라고 하고 s[3] 이 B라면, 즉 s[i] 자리에 대문자가 있다면 그대로 대문자로 반환해주어야 하므로

 

upper.includes(text) ? upper : lower   // 이 값을 변수로 할당해준다.

 

var textArr = upper.includes(text) ? upper : lower

 

👌 s가 a B z 일때 s[0] 은 a이고 a는 textArr의 0번째, 주어진 n만큼 위치를 변경해야 하므로

 

var index = textArr.indexOf(text)+n;   

 

👌 n을 더한 index가 알파벳 26를 넘어가게 되면, 다시 a로 돌아오므로 26을 넘어가거나 같을 경우(자리 위치이니까), textArr의 길이를 빼주면 된다.

 

어렵다..

 

✅ 최종 코드

 

function solution(s, n) {
    var upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var lower = "abcdefghijklmnopqrstuvwxyz";
    var answer= '';

    for(var i =0; i <s.length; i++){
        var text = s[i];
        if(text == ' ') {
            answer += ' '; 
            continue;
        }
        var textArr = upper.includes(text) ? upper : lower;    
        var index = textArr.indexOf(text)+n;   
        if(index >= textArr.length) index -= textArr.length;   
        answer += textArr[index];
    }
    return answer;
}
728x90