본문 바로가기
코테연습

127. 시저암호 Javascript

by hxunz 2022. 9. 12.

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만들어라
  • 주어진 자료는 무엇인가?
     - 문자열 s와 거리 n
  • 조건은 무엇인가?
     -
    공백은 아무리 밀어도 공백입니다.
     - s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
     - s의 길이는 8000이하입니다.
     - n은 1 이상, 25이하인 자연수입니다.

2. 계획

  1. 주어진 문자열의 유니코드를 알아낸다. 
  2. n 만큼 이동 시킨다. 
  3. 주어진 문자열이 z 혹은 Z 일 경우 문자열의 유니코드에서 26을 빼고 n 만큼 이동한다.
  4. 이동 후 다시 문자열로 변환하고 리턴한다.

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
function solution(s, n) {
  const code = s.split('').map((it) => it.charCodeAt(0));

  const str = code.map((it) => {
    if (it + n > 122 || it + n > 90 && it < 97) {
      return String.fromCharCode(it - 26 + n)
    } else if (it === 32) {
      return ' '
    }
    else {
      return String.fromCharCode(it + n)
    }
  });

  return str.join('');
}

test('시저암호', () => {
  expect(solution("AB", 1)).toEqual("BC");
  expect(solution("z", 1)).toEqual("a");
  expect(solution("a B z", 4)).toEqual("e F d");
  expect(solution("P", 15)).toEqual("E");
});

4. 반성

  • 문자열 유니코드 사용에 익숙하지 않아서 처음에 어떻게 문제를 풀어야할지 고민하느라 오랜 시간이 소요되어서 아쉬웠다. 

 

댓글