알고리즘 19번 decryptCaesarCipher

Judo·2020년 11월 15일
1
post-thumbnail

문제


암호화된 문자열과 암호화 키를 입력받아 복호화된 문자열을 리턴해야 합니다.
카이사르 암호(Caesar cipher)는 평문(plaintext)을 암호키 secret개만큼 (오른쪽으로) 평행이동시켜 암호화 합니다. 복호화는 암호화된 문자열을 원래의 평문으로 복원하는 것을 말합니다.

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

풀이 코드


function decryptCaesarCipher(str, secret) {
  // TODO: 여기에 코드를 작성합니다.
  /**
   * 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;
  
  let newArr = '';
  for(let i = 0; i < str.length; i++){
    if(str[i] === ' '){
      newArr += ' ';
    }else{
      idx = alphabet.indexOf(str[i]);
      if(idx-secret >= 0){          //1-2 = -1
       newArr += alphabet[idx-secret];
      }else{
        newArr += alphabet[26+(idx-secret)];
      }
    }
  }
  return newArr;
  }
  
profile
즐거운 코딩

0개의 댓글