시저 암호

Kylie·2022년 7월 13일
0

프로그래머스 Lv.1

목록 보기
19/69

문제
문자열 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)
  • ord(문자) : 문자의 아스키코드 값(숫자)을 반환
  • crd(아스키코드) : 아스키코드 값(숫자)에 해당하는 문자 반환

1) s[i]가 소문자인 경우 : [(s[i]의 아스키코드 값 - 'A'의 아스키코드 값 + n) 을 26으로 나눈 나머지 + 'A'의 아스키코드 값]에 해당하는 문자 반환

2) s[i]가 대문자인 경우 : [(s[i]의 아스키코드 값 - 'a'의 아스키코드 값 + n) 을 26으로 나눈 나머지 + 'a'의 아스키코드 값]에 해당하는 문자 반환

3) 변환된 s를 join을 이용해 연결

profile
딥린이

0개의 댓글