반응형

시저 암호

-풀이

def solution(s, n):
    answer = ''
    a = []
    for i in s:
        b = ord(i)+n
        if ord(i) < 91 and b > 90:
            a.append((b)-26)
        elif b > 122:
            a.append((b)-26)
        elif i == ' ':
            a.append(' ')
        else:      
            a.append(b)
    for i in a:
        if i == ' ':
            answer += ' '
        else:    
            answer += chr(i)
    return answer

-풀이 설명

처음엔 ord()함수로 문자열의 아스키코드를 찾아 n만큼 더한 후 다시 문자열로 나타내면 되는 줄 알았지만, z에서 n만큼 밀릴 경우를 조건문으로 나타내 주어야 했다. 그래서 아스키코드 표를 참고하여 n만큼 밀었을 때 'z'나 'Z'를 넘어갈 경우 다시 'a', 'A'로 갈 수 있게끔 만들어주었다.

다른 사람들의 풀이를 보니 isalpha() 함수를 이용해 문자열을 찾고, islower(), isupper()함수로 소문자, 대문자를 구별하는 방법도 있다는 것을 알게되었다.

+ Recent posts