Notice
Recent Posts
Recent Comments
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 연습문제 > 시저 암호 본문

코딩테스트

[JS] 연습문제 > 시저 암호

차차한 2022. 8. 23. 16:35

문제 보고 아스키코드 이용하면 되겠거니 싶었다.

근데 아스키코드 변환하는 법을 몰라서 이번 기회에 공부하게 됐다

function solution(s, n) {
    
    var answer = "";

    var arr = s.split("").map((v,i)=> s.charCodeAt(i));
    
    for(var i = 0; i < arr.length; i++){
        
        if(arr[i] >= 65 && arr[i] <= 90){
            
            arr[i] = arr[i] + n;
            
            if(arr[i] > 90){
                arr[i] = arr[i] - 26;
            }
        }else if(arr[i] >= 97 && arr[i] <= 122){
            
            arr[i] = arr[i] + n;
            
            if(arr[i] > 122){
                arr[i] = arr[i] - 26;
            }
        }
        arr[i] = String.fromCharCode(arr[i]);

        answer += arr[i];
    }

    return answer;
}

먼저 split으로 문자열을 배열로 만들어 주고 각 인덱스의 값을 charCodeAt으로 아스키코드로 변환시켜줬다.

그 후에 반복문을 돌려서 인덱스 값에 n만큼 더해줬는데 

대문자(A-Z.아스키코드 65~90)와 소문자(a-z.아스키코드 97~122) 분기를 나눠 n을 더하고 -> 범위를 지정해줘서 공백처리는 따로 안 해줘도 된다.

n을 더한 값이 90(Z) 또는 122(z)를 넘게 되면 다시 A/a로 돌아와야하기 때문에 각각 26을 빼줬다.

아스키코드에서 일반 문자로 변환은 String.fromCharCode로 해주었고 answer 변수에 값을 담아줬다.

 

다른 사람 풀이

광기가 느껴지는.....제 2의 수박

아스키코드 없이도 문제 풀이가 가능하다! 참고

Comments