def solution(s, n):
lower = 'abcdefghijklmnopqrstuvwxyz'*2
upper = lower.upper()
answer =''
for ch in s :
if ch.isupper() :
index = upper.find(ch)
answer += upper[index+n]
elif ch.islower():
index = lower.find(ch)
answer+= lower[index+n]
else :
answer += ch
return 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)
# 주어진 문장을 암호화하여 반환하세요.
# 실행을 위한 테스트코드입니다.
print('s는 "a B z", n은 4인 경우: ' + caesar("a B z", 4))
[출처] 프로그래머스 다른사람 코드
1) 문제 범위에서 n의 범위가 1~25까지였는데 z에서 a로 미룰 때의 인덱스 값을 어떻게 처리해야 할 지 몰라서 lower변수에 'abc...z'에 2를 곱했다. 만약 n의 조건이 없었다면 백퍼 틀릴 문제였다. 하하
나중에 생각해보니 26으로 나눈값의 인덱스를 찾으면 구할 수 있구나 꺠달았다!
2) 문자열에서 특정 문자가 있는 위치를 찾고 싶으면 문자열.find('특정문자')를 사용하면 된다!
다른 풀이를 보며 깨달은 것은 ord()와 chr()이었다. 아스키 코드를 이용하면 굳이 lower, upper 변수를 만들지 않아도 된다!
그래도 시간제한 내에 문제를 풀자고 목표를 정했기 때문에 꼼수를 썻지만 제한 내에 풀어낸 나 자신 칭찬해.
(하지만 이후 더 좋은 코드를 위한 피드백은 시간을 들여 열심히 하자)