상세 컨텐츠

본문 제목

알고리즘 문제풀이 - decryptCaesarCipher

Programming Language/JavaScript

by Yongari 2022. 12. 29. 22:03

본문

문제 설명 : 

암호화된 문자열과 암호화 키를 입력받아 복호화된 문자열을 리턴해야 한다.
카이사르 암호(Caesar cipher)는 평문(plaintext)을 암호키 secret개만큼 (오른쪽으로) 평행이동시켜 암호화 한다. 복호화는 암호화된 문자열을 원래의 평문으로 복원하는 것을 말한다. 알파벳 순서대로 배열을 만든 뒤 입력받은 secret에 따라 카이사르 암호를 복호화 하면 된다. 

'hello'를 secret 3으로 암호화한 경우: 'khoor'
'codestates'를 secret 11로 암호화한 경우: 'nzopdelepd'

입력

인자 1 : str

  • string 타입의 알파벳 소문자 문자열

인자 2 : secret

  • number 타입의 암호화 키

출력

  • string 타입을 리턴해야 합니다.

주의 사항

  • 빈 문자열을 입력받은 경우, 빈 문자열을 리턴해야 합니다.
  • 공백은 그대로 두어야 합니다.

입출력 예시

let output = decryptCaesarCipher('khoor', 3);
console.log(output); // --> hello

output = decryptCaesarCipher('zruog', 3);
console.log(output); // --> world

풀이코드 설명

function decryptCaesarCipher(str, secret) {
//알파벳을 words 배열에 선언
  const words = [
    "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;

  let newArr = "";
  for (let i = 0; i < str.length; i++) {
  //공백일 경우 공백을 더하기
    if (str[i] === " ") {
      newArr += " ";
    } else {
    // 인덱스에서 시크릿을 뺀 만큼 더해준다. 
      idx = words.indexOf(str[i]);
      if (idx - secret >= 0) {
        //1-2면 = -1
        newArr += words[idx - secret];
       
      } else {
        newArr += words[26 + (idx - secret)];
      }
    }
  }
  return newArr;
}

관련글 더보기