def solution(s, n):
s = list(s)
for i in range(len(s)):
if s[i].isupper():
s[i]=chr((ord(s[i])-ord('A') + n)%26+ord('A'))
elif s[i].islower():
s[i]=chr((ord(s[i])-ord('a') + n)%26+ord('a'))
return "".join(s)
ord : 내장 함수 , 알파벳에 해당하는 아스키 코드를 반환
-ord('a')
를 빼주는 이유:
0부터 시작하는 인덱스로 변환하기 위한 작업입니다.
인덱스를 0~25까지의 범위로 매핑 시키기 위해서.
% 26
을 하는 이유:
% 26
**는 이 순환을 구현하기 위한 것입니다. 만약 시프트 값이 26 이상이라면, **% 26
**을 통해 범위 내로 순환하게 됩니다. 예를 들어, 27을 26으로 나누면 1이 되고, 28을 26으로 나누면 2가 됩니다. 따라서 이 연산을 통해 알파벳이 순환되는 효과를 얻을 수 있습니다.