시저 암호

Jamie·2022년 3월 16일
0

프로그래머스_Level 1

목록 보기
17/22
post-thumbnail

문제

문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한 조건
공백은 아무리 밀어도 공백입니다.
s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
s의 길이는 8000이하입니다.
n은 1 이상, 25이하인 자연수입니다.
입출력 예
s n result
"AB" 1 "BC"
"z" 1 "a"
"a B z" 4 "e F d"

풀이

function solution(s, n) {
    // 소문자 알파벳이 담긴 문자열을 만든다
    // 대문자 알파벳이 담긴 문자열을 만든다
    // s 문자열을 반복문을 돌면서
    // i번째 요소가 공백일 경우 공백을 answer에 더해준다
    // i번째 요소가 small에 있을 경우 index를 구해서 n을 더해준 요소를 answer에 더해준다
    // i번째 요소가 big에 있을 경우 index를 구해서 n을 더해준 요소를 answer에 더해준다
    // 반복문을 다 돌면 answer를 리턴한다

    let small = "abcdefghijklmnopqrstuvwxyz";
    let big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let answer = "";

    for (let i = 0; i < s.length; i++) {
        if (s[i] === " ") {
            answer = answer + " ";
        } else if (small.indexOf(s[i]) === -1) {
            let index = big.indexOf(s[i]);
            answer = answer + big[(index + n) % 26];
        } else {
            let index = small.indexOf(s[i]);
            answer = answer + small[(index + n) % 26];
        }
    }
    return answer;
}

✅ 소문자와 대문자 각각의 배열을 만들어주고
글자의 인덱스를 찾아서 n만큼 더한 인덱스의 알파벳을 answer에 더해주면 풀어진다.

🤔 소문자 배열에서 indexOf()로 찾아서 없으면 대문자 배열에서 인덱스를 찾도록 코드를 짰는데
다른 방법이 또 없을까?하는 생각이..

profile
공부하고 비행하다 개발하며 여행하는 frontend engineer

0개의 댓글