어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
| s | n | result |
|---|---|---|
| "AB" | 1 | "BC" |
| "z" | 1 | "a" |
| "a B z" | 4 | "e F d" |
#모듈을 추가하여 알파벳 리스트 생성
import string
def solution(s, n):
answer = ''
#대문자 소문자 알파벳 리스트
list_lower = list(string.ascii_lowercase)
list_upper = list(string.ascii_uppercase)
#각 문자열 순회
for char in s:
#대문자와 소문자의 인덱스 찾아 n만큼 이동 후 새로운 문자로 변환
if char.isupper() :
index = list_upper.index(char)
#index는 char가 list_upper에 위치한 인덱스 번호를 저장한다.
#예를 들어 char가 b면 indexs는 2
answer += list_upper[(index + n) % 26]
"""
(index + n) % 26 부분은
시저 암호에서 문자를 'n'만큼 이동한 후 새로운 인덱스를 계산하는 것
%26은 알파벳 수 26으로 나눈 나머지를 구해 알파벳의 끝에 도달하면
다시 처음으로 돌아가게 함.
예를 들어 index가 25(Z)이고 n이 1이면 (25+1) % 26 = 0이 되어
새로운 위치는 0(A)가 된다.
"""
elif char.islower() :
index = list_lower.index(char)
answer += list_lower[(index + n) % 26]
elif char == " ":
answer += " "
#공백 유지
return answer