문제 풀이 흐름
이 사실을 기반으로 과정을 정리합니다.
1. 문자열을 배열로 만듭니다.
2. 반복문으로 순회하면서 문자에 숫자를 더합니다.
3. 완성된 결과를 하나의 문자열로 만들어서 반환합니다.
코드 작성
1. 문자열을 배열로 만듭니다.
문자열 자체를 바로 수정하는 것은 불가능합니다. 먼저 문자열을 명시적으로 배열로 변환해야 수정할 수 있습니다.
def solution(s, n):
s = list(s)
2. 반복문으로 순회하면서 문자에 숫자를 더합니다.
이제 쪼개진 문자열을 순회하면서 문자를 숫자로 바꾼 뒤, n을 더해주고 다시 문자로 되돌리는 작업을 수행할 것입니다.
현재 알파벳에 어떤 숫자를 더하든지 전체 글자 개수인 26으로 나누면 몇 번째 알파벳에 도달하는지 알 수 있습니다. 하지만 알파벳은 0부터 시작하는 것이 아니므로 첫 번째 알파벳의 위치만큼 미리 빼두었다가 계산한 후 다시 더해야 합니다. 따라서 전체 식의 구성은 (현재 글자의 숫자 – 알파벳 처음 위치 + 더해야 할 숫자) % 26 + 알파벳 처음 위치가 됩니다.
for i in range(len(s)):
if s[i] == ' ': continue
corr = ord('A') if s[i].isupper() else ord('a')
s[i] = chr((ord(s[i]) - corr + n) % 26 + corr)
수정할 문자에 공백은 포함되지 않는다는 점을 기억합시다.