[Python# 45] 시저 암호

Gi Woon Lee·2024년 8월 22일
0

Python

목록 보기
5/13

programmers 시저암호

문제:

시저 암호화가 완료된 값을 return 하라.

  • 시저 암호화: 주어진 문장을 주어진 거리 만큼 밀어서 해당 거리에 있는 문장으로 바꾸는 것을 뜻한다. 예를 들어 "AB" 를 2 만큼 시저 암호화 하면 "CD"가 된다.

문제를 풀기 위한 함수: chr(), ord()

  • chr(n): 유니코드 숫자 값을 입력받아 그 코드에 해당하는 문자를 리턴하는 함수
chr(97) = a
  • ord(s): 문자를 입력받아 해당 문자에 해당하는 유니코드 숫자를 리턴하는 함수
ord("h") = 104

전략:

  1. ord()함수로 주어진 문자열 값들을 유니코드로 바꿔준다.
  2. 유니코드 연산을 통해 반환할 문자열의 유니코드를 계산한다.
  3. 반환할 유니코드를 chr()함수를 통해 문자열로 바꿔준다.

코드:

def solution(s, n):
	answer = ""
    for alp in s:
    if alp == " ":
    	answer += " "
    elif alp.islower():
    	answer += chr((ord(alp) - ord('a`) + n) % 26 + ord('a'))
    elif alp.isupper():
            answer += chr((ord(alp)-ord('A') + n) % 26 + ord('A'))
    return answer
  • 핵심코드:
chr((ord(alp) - ord('a') + n) % 26 + ord('a'))
  1. ord('a'): 알파벳 a의 아스키 숫자는 97이다. "알파벳 몇 번째 숫자"를 구하려면 'a'를 기준으로 삼아야 한다.
  2. (ord(alp) - ord('a') + n): alp가 알파벳 몇 번째 숫자인지 수하고, 거기에 n만큼 구하면 우리가 찾아야 할 값의 알파벳 숫자를 알 수 있다.
  3. ((ord(alp) - ord('a') + n) % 26: 어떤 값이 26이 아닌 이상 26을 나눠봐야 몫은 0, 나머지는 그해당 값이 그대로 나온다. 따라서 알파벳 마지막(26번째) z 가 나오면 다시 1인 a로 넘어가게 만들어주는 역할을 한다.
  4. chr((ord(alp) - ord('a') + n) % 26 + ord('a')): chr() 함수를 통해 해당 아스키 숫자를 문자열로 바꿔준다.

0개의 댓글