[Algorithm🧬] 시저 암호

또상·2022년 1월 11일
0

Algorithm

목록 보기
31/133
post-thumbnail

문제 / 풀이.py

처음에는 A~Z 까지를 배열로 선언한 다음에 배열 개수로 나머지 구해서 하려고 생각했는데, 아무리 생각해도 알파벳 배열을 하나하나 치는게 너무 귀찮아서, 아스키 코드를 이용하기로 했다.

그래서 해당 글자부터 A까지의 차이 (몇 번째 글자인지) 를 계산하고 미는 칸 만큼 더해서 26(알파벳 수) 로 나누면 밀리는 글자가 몇번째 글자인지가 나오고, 그걸 다시 처음 값의 아스키 코드에 더해주면 해당 글자가 되기 때문에 아래와 같이 풀었는데...

def solution(s, n):
    answer = ''

    for c in s:
        if c.isupper():
            # 처음에 잘못 생각한 답. 이러면 65로 나누는게 되어서 Z가 안밀린다.
            # answer += chr(ord('A') + (ord(c) + n) % ord('A'))
            answer += chr(ord('A') + (ord(c) - ord('A') + n) % 26 )
        elif c.islower():
            answer += chr(ord('a') + (ord(c) - ord('a') + n) % 26 )
        else:
            answer += c
    
    return answer

문제 케이스를 다시 읽어보니 소문자도 있었고 해서 좀 헤맸다.. 그래서 그냥 배열을 선언하는게 나았으려나 ? 하고 찾아보니 이런 라이브러리가 있다고 한다. 익숙해져보자.

import string
def listAlphabet():
    return list(string.ascii_lowercase)
print(listAlphabet())

사실 chr ord 는 쓸때마다 헷갈려서 검색해보게 됨... 이런 의미에서는 C언어가 최고입니다.

profile
0년차 iOS 개발자입니다.

0개의 댓글