문제 설명 🤓
시저 암호에 대한 문제이다.
문자열과 정수(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를 반환한다.
코드
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)