오늘의 알고리즘 👍
📝 1. 시저 암호
- 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.
- 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다.
- 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
▷ 입출력 예
solution("AB", 1)
solution("z", 1)
solution("a B z", 4)
▷ 내 풀이
function solution(s, n) {
let arr = 'abcdefghijklmnopqrstuvwxyz';
let ARR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let answer = '';
for (let i = 0; i < s.length; i++) {
s[i] === ' ' ? (answer += ' ') : 0;
for (let j = 0; j < arr.length; j++) {
s[i] === arr[j] ? (answer += arr[(j + n) % arr.length]) : 0;
s[i] === ARR[j] ? (answer += ARR[(j + n) % arr.length]) : 0;
}
}
return answer;
}
▷ 수업 풀이
const alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
function solution(s, n) {
let answer = '';
for (let i = 0; i < s.length; i++) {
if (s[i] === ' ') {
answer += ' ';
} else {
let idx = alphabet.indexOf(s[i]);
const word = idx > 25 ? alphabet.slice(26) : alphabet.slice(0, 26);
idx = word.indexOf(s[i]) + n;
if (idx >= 26) {
idx -= 26;
}
answer += word[idx];
}
}
return answer;
}
▷ 수업 풀이 2
const lower = 'abcdefghijklmnopqrstuvwxyz';
const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function solution(s, n) {
let answer = '';
for (let i = 0; i < s.length; i++) {
if (s[i] === ' ') {
answer += ' ';
} else {
const word = lower.includes(s[i]) ? lower : upper;
let idx = word.indexOf(s[i]) + n;
if (idx > 25) {
idx -= 26;
}
answer += word[idx];
}
}
return answer;
}
▷ split, reduce 매서드 사용 풀이
const lower = 'abcdefghijklmnopqrstuvwxyz';
const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
function solution(s, n) {
let answer = s.split('').reduce((acc, cur) => {
const word = lower.includes(cur) ? lower : upper;
let idx = word.indexOf(cur) + n;
if (idx >= 26) {
idx -= 26;
}
return acc + (cur === ' ' ? ' ' : word[idx]);
}, '');
return answer;
}
▷ 아스키 코드 사용 풀이
function solution(s, n) {
let answer = '';
for (let i = 0; i < s.length; i++) {
let idx = s[i].charCodeAt() + n;
if (idx > 122 || (idx > 90 && idx - n < 97)) {
idx -= 26;
}
answer += s[i] === ' ' ? ' ' : String.fromCharCode(idx);
}
return answer;
}
출처: 프로그래머스
출처: 코드캠프