[알고리즘 프로그래머스] 시저 암호 (LEVEL 1)

(문제) 시저 암호


어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다.

예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다.

z는 1만큼 밀면 a가 됩니다.

문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

입력설명

첫번째 입력으로는 s 즉, 문자가 들어옵니다.

두번째 입력으로는 n 즉, 미는 만큼이 들어옵니다

공백은 아무리 밀어도 공백입니다.

s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.

s의 길이는 8000이하입니다.

n은 1 이상, 25이하인 자연수입니다.

출력설명

문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

테스트케이스

입력예제 출력예제
“AB” 1 “BC”
“z” 1 “a”
“a B z” 4 “e F d”

해결방법

ASCII 코드를 이용하여 문제 해결을 하려고 한다.

A -> 65 / a -> 97

문자열을 순회하여 각 문자의 아스키코드를 값을 구한다.

만약 문자가 A~Z 일경우 아스키코드로 변환한 글자를 - 65 하고 + n 만큼 더하고 그것을 % 로 알파벳 개수만큼 나눈다.

그 후 -65 를 했던 것을 원상 복구를 시키기 위해서 +65를 한다.

a~z 또한 마찬가지로 위와 같은 과정을 65를 97로 생각을하고 작업을 한다.

만약 a~z 또는 A~Z가 아닐 경우 그냥 그 글자를 그대로 이용한다.


코드

s, n = input().split()

n = int(n)

answer = ""

for word in s:
    if 'A' <= word <= 'Z':
        answer = answer + chr((ord(word) - 65 + n) % 26 + 65)
    elif 'a' <= word <= 'z':
        answer = answer + chr((ord(word) - 97 + n) % 26 + 97)
    else:
        answer = answer + word

print(answer)

댓글남기기