23/12/12

Laejun Kim·2023년 12월 12일
0

TIL

목록 보기
54/89

연습문제

시저 암호

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

  • 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

<내 풀이>

function solution(s, n) {
const temp=s.split('').map((el,idx)=>{
                const charCode= el.charCodeAt()
                let z=0
                if(charCode<=64) return el
                if(charCode>=65 && charCode<=90 && (charCode+n)>=91)
                {z-=26}
    if(charCode>=97&&charCode<=122 &&(charCode+n)>=123){z-=26}
                return String.fromCharCode(charCode+n+z)})
return temp.join('')
}
  1. 입력받은 문자열 s 의 알파벳을 하나하나 쪼개 배열에 담는다.
  2. map 으로 각 알파벳의 아스키 코드를 charCode 상수에 저장한다.
  3. charCode 가 64 이하라면 공백(' ') 이라는 의미이므로 그대로 리턴한다.
  4. charCode 가 65이상 90 이하라면 대문자 알파벳을 의미하는데 이때 charCode+n 이 91을 넘어간다면 다시 A부터 시작해야 하므로 z에 -26을 할당.
  5. charCode 가 97이상 122 이하라면 대문자 알파벳을 의미하는데 이때 charCode+n 이 123을 넘어간다면 다시 a부터 시작해야 하므로 z에 -26을 할당.
  6. String.fromCharCode(charCode+n+z) 로 n만큼 밀린 알파벳을 리턴 받고 그것을 temp 배열에 담는다.
  7. temp.join('')으로 암호화된 문자열을 리턴한다.

<배운 점>

아스키코드를 사용하는 코드를 처음 작성해 보았다.
기본적으로 아래 코드 테이블을 활용한다.

  • 문자열.charCodeAt(idx) : index 에 해당되는 문자의 아스키 코드를 반환한다. idx를 비워두면 자동으로 맨 앞(idx=0)으로 실행된다.

  • String.fromCharCode(숫자) : 아스키 코드 테이블에서 Dec 숫자에 해당되는 문자를 반환한다. charCodeAt의 반대 작용을 한다고 보면 된다.

TypeScript 입문

왜 쓰는가?

JavaScript 의 약점

  • 변수타입이 런타임에 결정된다 ➡️ 오류 빈발, 오류를 찾기 난해함

  • 약한 타입 체크

  • 객체를 다룰때 의도에서 벗어난 객체 성질 변화에 취약

TypeScript 로 달라지는 점들

  • 코드 편집기 혹은 컴파일 할때 오류 체크가 용이함

  • 변수 타입이 런타임이 아닌 컴파일 하때 체크 됨

  • 객체를 보다 엄밀하게 사용 가능!

  • 코드의 유지 보수에 드는 시간과 노력 절감/가독성 증가

  • TS 특유의 안정성으로 테스트 코드가 줄어듬

0개의 댓글