https://school.programmers.co.kr/learn/courses/30/lessons/12926
어떤 문장이 주어졌을 때 각 알파벳을 일정 거리만큼 밀어서 새로운 문자열을 만들어야 한다. 문자열은 알파벳 소문자, 대문자, 공백으로만 이루어져 있으며 공백인 경우는 따로 밀지 않고 공백을 유지한다.
문자를 일정 거리만큼 밀어야하므로 아스키 코드를 활용했다. (ord() 함수
)
어떤 문자 ch
가 있고 n
만큼 밀어야 한다면
# 소문자
ord(ch) - ord('a') + n % 26 + ord('a')
# 대문자
ord(ch) - ord('A') + n % 26 + ord('A')
위 식을 통해 알파벳의 위치를 알아내고 ord('a'), ord('A')
를 각 경우에 더해줘서 아스키 코드화 시킨다. 그리고 이를 문자로 만들기 위해 chr()
함수를 사용하면 된다.
def lower_push(ch, n):
return chr((ord(ch) - ord('a') + n) % 26 + ord('a'))
def upper_push(ch, n):
return chr((ord(ch) - ord('A') + n) % 26 + ord('A'))
공백의 경우에는 바꿀 문자열에 그대로 공백을 더해주면 되고 주어진 문자열을 for문
을 통해 탐색하면서 소문자인지 대문자인지를 구분하여 새로운 문자열을 생성해주면 된다.
def lower_push(ch, n):
return chr((ord(ch) - ord('a') + n) % 26 + ord('a'))
def upper_push(ch, n):
return chr((ord(ch) - ord('A') + n) % 26 + ord('A'))
def solution(s, n):
answer = ''
for ch in s:
if ch == ' ':
answer += ch
elif ch.islower():
answer += lower_push(ch, n)
else :
answer += upper_push(ch, n)
return answer