[프로그래머스](python) 시저 암호(Caesar Cipher)

berry ·2021년 5월 21일
0

Algorithm

목록 보기
30/77
post-thumbnail

문제


🧩 시저 암호(Caesar Cipher)

  • 암호화하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식
  • 예를 들어 3글자씩 밀어내는 카이사르 암호로
    'COME TO ROME' 을 암호화하면 'FRPH WR URPH' 가 된다.

🧩 ASCII

  • 파이썬 내장 함수를 통해 문자와 아스키코드를 변환할 수 있다.

🧩 변환

  • 숫자로 변환 👉🏻 ord('문자')
  • 문자로 변환 👉🏻 chr(숫자)

🧩 수도 코드

  • Upper_number : 65 - 90
  • Lower_number : 97 - 122
n = 1
s = 'AB'

if i is ' '
add i to answer
for i in AB
1) if 65<=number(A) >=65:
	if number(A) > 65: (= >=Z)
    back to number(A)
   elif:
   number(A) + n 

🏁 내 풀이


def solution(s,n):
    answer = ''
    for i in s:
        cha = ord(i) + n
        if 65 <= ord(i) <= 90:
            if cha > 90:
                answer += chr(cha-26)
            else:
                answer += chr(cha)
        elif 97 <= ord(i) <= 122:
            if cha > 122:
                answer += chr(cha-26)
            else:
                answer += chr(cha)
        if i == ' ':
            answer += ' '
    return answer

📌

  • ' '를 저장 값으로 쓸 수 있음
  • yY 값에 주의하기

🧩 다른 풀이

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)

📌

  • 리스트 내부 ' ' 를 없애주기 위해 사용한 ''.join(list)
  • 26 이상일 때 기호가 나오는 것을 방지하기 위해 % 26
  • +ord('A')함으로써 다시 A부터 시작

profile
Engineer

0개의 댓글