Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 구현하는 Atbash 암호: 알파벳 역순 치환 암호화 완전 정복

소문자 알파벳으로 이루어진 문자열 text가 주어졌을 때, 문자열 내 모든 문자를 알파벳 기준 정반대 위치의 문자로 치환한 새로운 문자열을 만들어야 합니다. 예를 들어 az로, by로 변환되는 방식입니다.

이러한 치환 방식은 고대 히브리 문자에서 유래한 Atbash(앗바쉬) 암호로 알려져 있으며, 각 문자를 알파벳 순서상 거울 위치의 문자로 바꾸는 가장 단순한 형태의 치환 암호 중 하나입니다.

따라서 입력이 "abcdefg"라면 출력은 "zyxwvut"이 됩니다.

해결 접근 방법

이 문제는 다음 단계를 따르면 해결할 수 있습니다.

  • N := ord('z') + ord('a') — 즉, 'z'와 'a'의 아스키 코드 값을 더한 상수 N을 정의합니다. (219)

  • text의 각 문자 s에 대해 chr(N − ord(s))를 계산해 새로운 문자를 얻고, 이들을 하나의 문자열로 연결하여 반환합니다.

핵심 아이디어는 'a'와 'z', 'b'와 'y'처럼 서로 뒤집힌 두 문자의 아스키 코드 합이 항상 일정하다는 점입니다. 그렇기 때문에 그 합에서 현재 문자의 아스키 코드를 빼기만 하면 자동으로 반대편에 있는 문자를 얻을 수 있으며, 별도의 매핑 테이블 없이 한 줄의 리스트 컴프리헨션으로 처리할 수 있습니다.

구현 예제

class Solution:
    def solve(self, text):
        N = ord('z') + ord('a')
        ans = ''
        return ans.join([chr(N - ord(s)) for s in text])

ob = Solution()
print(ob.solve("abcdefg"))
print(ob.solve("hello"))

입력

"abcdefg"
"hello"

출력

zyxwvut
svool

복잡도 분석

  • 시간 복잡도: O(n) — 입력 문자열의 길이 n에 비례하여 각 문자를 한 번씩만 처리합니다.

  • 공간 복잡도: O(n) — 결과 문자열을 저장하기 위한 추가 공간이 필요합니다.

이처럼 Atbash 암호는 파이썬의 ord()chr() 함수만 활용하면 매우 간결하게 구현할 수 있으며, 암호학 입문자에게 치환 암호의 동작 원리를 익히기 좋은 예제입니다.