기록

[Level1] 시저 암호 본문

Algorithm/Programmers

[Level1] 시저 암호

dev.jung 2021. 8. 5. 09:51

문제

 

내 풀이

아스키코드를 활용했다.

32는 ''이고 아무 작업도 실행하지 않고 리턴한다.
소문자일 경우 현재 글자 아스키코드에서 이동할 s를 더했을 때 z의 아스키코드인 122보다 크면 
현재 글자 아스키코드에서 s를 더한 값에서 z의 값인 122를 빼 차이를 구한 다음 96을 더해준다.
122인 z에서 a로 갈 시 위에서 구한 차이가 1 이기 때문에 a의 아스키코드인 97에서 더하면 b가 된다.
그래서 1 작은 96에서 더해준다.
대문자일 경우에도 같은 방식으로 적용을 했다.

function solution(s, n) {
    const array = s.split('');

    for (let i = 0; i < array.length; i++) {
        array[i] = move(array[i], n)
    }
    return array.join('');
}

function move(word, n) {
    if (word.charCodeAt() === 32) {
        return word;
    }

    if (word.toLowerCase() === word) {
        if (word.charCodeAt() + n > 122) {
            return String.fromCharCode(96 + (word.charCodeAt() + n - 122))
        } 
        return String.fromCharCode(word.charCodeAt() + n)
    } else {
         if (word.charCodeAt() + n > 90) { 
            return String.fromCharCode(64 + (word.charCodeAt() + n - 90))
         } 
        return String.fromCharCode(word.charCodeAt() + n)
    }
}

 

반응형
Comments