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)
  1. ord : 내장 함수 , 알파벳에 해당하는 아스키 코드를 반환

  2. -ord('a')를 빼주는 이유:

    0부터 시작하는 인덱스로 변환하기 위한 작업입니다.

    인덱스를 0~25까지의 범위로 매핑 시키기 위해서.

  3. % 26을 하는 이유:

  1. 다시 아스키 코드로 반환해주기 위해서 , 뒤에 + ord('A')을 해준다.