[HackerRank] Caesar Cipher Solution (Python3)

Sage·2023년 2월 27일
0

코테 풀이

목록 보기
3/5

[HackerRank] Caesar Cipher - Problem

Q) 카이사르 암호 (시저 암호): 알파벳을 특정 숫자만큼 옆으로 이동시켜서 치환하기

  • Examples (rotation by 2): abcdcdef

아스키 코드표

  • ASCII 코드: 영문 알파벳을 사용하는 대표적인 문자 인코딩
    Wikimedia - ASCII TABLE
  • 유니코드: 영어 외에도 모든 나라의 문자를 포함하는 문자셋
  • ord(): 1개의 유니코드 문자 -> 유니코드 정수
  • chr(): 유니코드 정수 -> 1개의 유니코드 문자
  • 알파벳 개수: 26개 → A: 65, Z: 90 / a: 97, z: 122

풀이

def caesarCipher(s, k):
    k %= 26
    s2 = ""
    for ch in s:
        if ch.isupper():
            chInt = ord(ch) + k
            if chInt <= ord('Z'):
                s2 += chr(chInt)
            else:
                s2 += chr(chInt - 26)
        elif ch.islower():
            chInt = ord(ch) + k
            if chInt <= ord('z'):
                s2 += chr(chInt)
            else:
                s2 += chr(chInt - 26)
        else:
                s2 += ch        
    return s2
  1. k > 26 인 경우 상정 → 26으로 나눈 나머지 활용
  2. 대문자/소문자 구분
  3. k만큼 자리 이동
  4. 끝 알파벳(Z, z)을 넘어가는 경우, 26만큼 빼기
    (다시 A, a부터 시작)
  5. 알파벳이 아닌 경우 그대로 사용 (ex. ', -)

실행 결과

profile
Wanna know everything I need

0개의 댓글