프로그래머스

프로그래머스 - 시저 암호 [Python]

SS_G 2023. 6. 10. 16:55
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

안녕하세요, 오늘은 프로그래머스 '시저 암호' 문제에 대해 살펴보겠습니다. 

 

문제 설명

먼저 문제의 요구사항을 이해해야 합니다. '시저 암호'는 어떤 문자열을 알파벳 순서로 일정한 거리만큼 밀어내어 새로운 문자열을 만드는 방식의 암호화 기법입니다.

예를 들어 "AB" 문자열이 주어지고, 1만큼 밀어내라는 명령이 있다면 결과는 "BC"가 됩니다. 만약 'Z' 문자가 주어지고 1만큼 밀어내라는 명령이 있다면 결과는 'A'가 됩니다. 이처럼 'Z' 다음에는 다시 'A'로 돌아가는 원형 구조라는 것을 이해해야 합니다.

 

문제 풀이

이 문제를 해결하려면 각 문자를 ASCII 코드로 변환하고, 일정한 거리만큼 밀어낸 후에 다시 문자로 변환하는 과정이 필요합니다. 이 때 주의할 점은 대문자와 소문자의 ASCII 코드 범위가 다르다는 점과, 공백(' ')은 밀어내지 않는다는 점입니다.

Python의 ord() 함수와 chr() 함수를 이용하면 문자와 ASCII 코드 간의 변환이 쉽습니다. 예를 들어, ord('A')는 'A'의 ASCII 코드인 65를 반환하고, chr(65)는 ASCII 코드 65에 해당하는 문자 'A'를 반환합니다.

 

def solution(s, n):
    answer = ''

    for ch in s:
        if ch.isalpha():
            ascii_start = 65 if ch.isupper() else 97
            ch = chr((ord(ch) - ascii_start + n) % 26 + ascii_start)
        answer += ch

    return answer

위 코드에서 ascii_start는 대문자인 경우와 소문자인 경우로 ASCII 시작 위치를 달리 설정합니다. 그 후, 문자를 ASCII 코드로 변환하고 n만큼 밀어낸 후에 다시 문자로 변환하는 과정을 거칩니다. 이 때, % 26 연산을 이용해 'Z' 다음에는 'A'로 돌아가도록 하였습니다.

문제를 푼 후에는 다양한 테스트 케이스로 검증하는 것을 잊지 마세요.

이것으로 '시저 암호' 문제 풀이를 마치겠습니다.  Python의 문자열 처리 기능을 활용하면 쉽게 해결할 수 있는 문제였습니다. 감사합니다!

반응형