STUDY/Algorithm

[프로그래머스] LEVEL1 시저암호, python3

sinawi95 2019. 10. 17. 11:09
728x90

def solution(s, n):
    answer = '' # 알파벳 26개, A 65 Z: 90 a:97 z:122 (space): 32
    for i in s:
        if ord(i)==32:  # case (SPACE)
            answer+=(i)
            continue
        elif (ord(i)>=65) & (ord(i)<=90): # case UPPER
            tmp=ord(i)+n
            if tmp>90:
                tmp-=26
            answer+=(chr(tmp))
        elif (ord(i)>=97) & (ord(i)<=122): # case LOWER
            tmp=ord(i)+n
            if tmp>122:
                tmp-=26
            answer+=(chr(tmp))

    return answer


C에서는 character를 int로 찍으면 ascii code로 나타내주는데 파이썬은 ord()함수를 써야했다.

ord()함수를 사용해서 (space)면 그대로 추가하고 upper나 lower 이면 시저암호를 돌리는 방식이다.


타인의 코드

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))


isupper(), islower() 라는 함수를 사용하면 간단하게 끝난다........

나는 너무 C처럼 생각했나보다