[프로그래머스] 시저 암호 - JavaScript
문제 출처
문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 “AB”는 1만큼 밀면 “BC”가 되고, 3만큼 밀면 “DE”가 됩니다. “z”는 1만큼 밀면 “a”가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
예시
입출력 예
s | n | return |
---|---|---|
“AB” | 1 | “BC” |
“z” | 1 | “a” |
“a B z” | 4 | “e F d” |
풀이
function solution(s, n) {
// 알파벳 대문자 소문자 문자열을 정의해준다.
const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const lower = "abcdefghijklmnopqrstuvwxyz";
// 알파벳의 길이를 정의해준다.
const length = upper.length;
let answer = "";
// 파라미터로 들어온 s의 크기만큼 for문을 돌려준다.
for (let i = 0; i < s.length; i++) {
// includes() 메서드와 삼항 연산자를 통해
// s[i]가 대문자에 들어있으면 position 변수에 upper을
// s[i]가 소문자에 들어있으면 position 변수에 lower을
// 공백일 경우 null을 넣어준다.
let position = upper.includes(s[i])
? upper
: lower.includes(s[i])
? lower
: null;
if (position) {
// indexOf() 메서드를 사용해 해당 문자의 인덱스를 찾고 n을 더해준다.
const idx = position.indexOf(s[i]) + n;
// n을 더한 인덱스가 알파벳의 길이보다 클 경우
// 인덱스에서 알파벳 길이를 뺀 값을 찾아주고
// 아닐경우 그 인덱스에 해당하는 문자를 answer에 넣어준다.
answer += idx >= length ? position[idx - length] : position[idx];
} else {
// position이 null일 경우 answer에 공백을 넣어준다.
answer += " ";
}
}
// 최종 값을 리턴한다.
return answer;
}
console.log(solution("AB", 1)); // "BC"
console.log(solution("z", 1)); // "a"
console.log(solution("a B z", 4)); // "e F d"
정리
오늘은 String의 indexOf(), includes() 메서드를 사용해서 문제를 풀어봤습니다.
사용된 메서드와 문법에 대해 더 공부하고 싶으신 분은 링크를 클릭해주세요!
indexOf() 메서드 - MDN
includes() 메서드 - MDN
피드백은 언제나 환영입니다. 😊