문제
문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수
s = "AB", n = 1, result = "BC"
s = "z", n = 1, result = "a"
s = "a B z", n = 4, result = "e F d"
내 코드
import string def solution(s, n): l = [i for i in string.ascii_lowercase] u = [i for i in string.ascii_uppercase] answer = [] for i in s : if i in l : idx = l.index(i)+n answer.append(l[idx%26]) elif i in u : idx = u.index(i)+n answer.append(u[idx%26]) else : answer += i return ''.join(answer)
다른 풀이
def caesar(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) s[i]가 소문자인 경우 : [(s[i]의 아스키코드 값 - 'A'의 아스키코드 값 + n) 을 26으로 나눈 나머지 + 'A'의 아스키코드 값]에 해당하는 문자 반환
2) s[i]가 대문자인 경우 : [(s[i]의 아스키코드 값 - 'a'의 아스키코드 값 + n) 을 26으로 나눈 나머지 + 'a'의 아스키코드 값]에 해당하는 문자 반환
3) 변환된 s를 join을 이용해 연결