문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 “AB”는 1만큼 밀면 “BC”가 되고, 3만큼 밀면 “DE”가 됩니다. “z”는 1만큼 밀면 “a”가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한사항

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.
  • 문제 보러가기


문제 풀이

(1) Pseudo-Code

  • 알파벳을 소문자, 대문자 준비하고 밀어서 다른 알파벳으로 바꾼 것을 answer 에 담도록 한다.
  • 뒤에 위치한 알파벳을 특정 거리만큼 밀었을 때에도 알파벳을 반환해야하기 때문에 알파벳을 두번 반복하여 저장한다.
  • 반복문을 돌려서 문자가 공백일땐 그대로 answer에 담는다.
  • 문자가 소문자에 속한 것이라면 인덱스값을 찾은 후 n만큼 멀리있는 문자를 불러온다.
  • 대문자 또한 소문자와 동일한 방식을 사용한다.

(2) 코드 작성

def solution(s, n):
    l_alpha = 'abcdefghijklmnopqrstuvwxyz' * 2
    u_alpha = l_alpha.upper()
    answer = ''
    for alpha in s:
        if alpha == ' ':
            answer += alpha
        elif alpha in l_alpha:
            idx = l_alpha.index(alpha) + n
            answer += l_alpha[idx]
        elif alpha in u_alpha:
            idx = u_alpha.index(alpha) + n
            answer += u_alpha[idx]
    return answer

(3) 코드 리뷰

  • 공백은 공백대로, 대소문자는 대소문자대로 구분하여 암호를 만들어야하기 때문에 if 문을 사용했다.
  • 마지막 elif 문은 else 로 작성해도 되지만(제한사항을 보면 else로 처리해도 됨) 현실세계에서 데이터가 들어오는 상황이라면 별다른 전처리 과정이 없다면 else로 했을 때 오류가 발생할 수도 있겠다고 생각되어서 elif 문을 사용해 보았다.

👩🏻‍💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.

댓글남기기