[HackerRank] Caesar Cipher - Python3 풀이 (String, Easy)

leehyuna·2022년 5월 1일
0

코딩테스트

목록 보기
6/8
post-thumbnail
  • 문제 설명 🤓
    시저 암호에 대한 문제이다.
    문자열과 정수(k)가 주어지며, 문자열 내 문자를 알파벳 순서 k 다음 문자로 바꾼 문자열을 반환하는 문제이다.
    문자 변경으로 z가 넘어가면 다시 a로 돌아가 매핑한다.
    예를 들어 k=3이고, 문자 w,x,y,z 이면 z,a,b,c 로 매핑된다.

  • 나의 풀이 포인트 📌
    (1) Ascii 코드를 이용한다.
    (2) 소문자와 대문자를 구분하여 처리한다.
    (3) 변환 시, z가 넘어가는 경우 처리
    : 알파겟 개수가 26개임을 이용하여 변환 후 ascii 코드 계산

  • 알아둘 것 ⭐️
    (1) ord(), chr()
    : ASCII 코드 관련 python 내장 함수이다.

    • ord(문자)
      : 하나의 문자를 인자로 받아 해당하는 유니코드 정수를 반환

    • chr(정수)
      : 하나의 정수를 인자로 받아 해당하는 유니코드 문자를 반환

      ord('a')  # 97
      ord('z')  # 122   
      ord('A')  # 65
      ord('Z')  # 90
      ord('ㄱ') # 12593
      ord('ㅎ') # 12622
      
      chr(97)    # a
      chr(122)   # z
      chr(12593) # ㄱ

    (2) islower(), isupper(), isalpha(), isalnum(), isdigit() ...

    • 아래 함수들은 모두 판단 결과에 따라 True/False를 반환한다.

      • islower(): 문자열이 모두 소문자인지
      • isupper() : 문자열이 모두 대문자인지
      • isalpha() : 문자열이 모두 알파벳인지
      • isalnum() : 문자열이 모두 알파벳 또는 숫자인지
      • isdigit() : 문자열이 모두 숫자인지
        (음수나 소숫점이 포함되어 있으면 False 반환하니 주의)
      • isdecimal() : 문자열이 int 타입으로 변경가능한지
  • 코드

def caesarCipher(s, k):
    
    result = list(map(lambda x : chr((ord(x)-ord('a')+k)%26+ord('a')) if x.islower() else x, s))
    result = list(map(lambda x : chr((ord(x)-ord('A')+k)%26+ord('A')) if x.isupper() else x, result))

    return ''.join(result)
profile

0개의 댓글