let output = decryptCaesarCipher('khoor', 3);
console.log(output); // --> hello
output = decryptCaesarCipher('zruog', 3);
console.log(output); // --> world
코드
// 작성코드 참고
function decryptCaesarCipher(str, secret) {
/**
* 1. 카이사르 암호로 된 str을 입력받는다.
* 2. str을 복호화한다.
* - alphabet -> 알파벳 집합을 배열로 선언 , 초기화한다.
* - str을 순회한다.
* - 순회하면서 str[i] 에 접근한다.
* - alphabet.indexOf(str[i])를 이용해 alphabet에 속한 index를 얻어낸다.
* -
* - 얻어낸 index를 이용해 secret를 빼줌으로써 복호화된 문자열을 구한다.
* - 생각해줘야 할 예외
* - index - secret 이 음수가 나올 경우 : alphabet[0] 에서 alphabet[25]로 이동해야함.
* - newStr += alphabet[index - secret];
* 3. 복호화한 newStr을 리턴한다.
*/
// 알파벳 배열을 정의합니다.
const alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
let idx = 0; // idx는 알파벳 배열에서의 인덱스를 나타냅니다.
let newArr = ''; // 복호화 된 문자열을 저장할 변수를 정의합니다.
// 문자열의 각 문자에 대해 반복합니다.
for(let i = 0; i < str.length; i++){
if(str[i] === ' '){ // 공백인 경우
newArr += ' '; // 공백을 그대로 저장합니다.
}else{
// 각 문자의 알파벳 배열에서의 인덱스를 구합니다.
idx = alphabet.indexOf(str[i]);
// idx - secret이 0 이상인 경우
if(idx-secret >= 0){
// idx-secret에 해당하는 알파벳을 newArr에 저장합니다.
newArr += alphabet[idx-secret];
}else{
// idx - secret이 0 미만인 경우
// 26+(idx-secret)에 해당하는 알파벳
// 알파벳을 newArr에 저장합니다.
newArr += alphabet[26+(idx-secret)];
}
}
}
// 복호화 된 문자열을 반환합니다.
return newArr;
}
// 작성코드2
function decryptCaesarCipher(str, secret) {
const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('');
let decrypted = '';
for (let i = 0; i < str.length; i++) {
let char = str[i];
if (char === ' ') {
decrypted += ' ';
} else {
let index = alphabet.indexOf(char);
let newIndex = (index - secret + 26) % 26;
decrypted += alphabet[newIndex];
}
}
return decrypted;
}
// 레퍼런스
function decryptCaesarCipher(str, secret) {
// 알파벳
let alpha = 'abcdefghijklmnopqrstuvwxyz';
let result = '';
for (let i = 0; i < str.length; i++) {
if (str[i] === ' ') {
// 공백은 그대로 둔다.
result = result + ' ';
} else {
// 현재 문자의 알파벳 순서를 구한다.
let asis = alpha.indexOf(str[i]);
// 복호화는 반대 방향으로 이루어기 때문에 seceret을 뺀다.
let tobe = (asis - secret + alpha.length) % alpha.length;
result = result + alpha[tobe];
}
}
return result;
}