알고리즘 뿌셔/프로그래머스

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

데브티치 2021. 9. 12. 16:15

이 글에는 프로그래머스 시저암호 문제에 대한 풀이와 정답 코드(Python)가 있습니다.

문제

시저암호란?
암호화 하고자 하는 내용을 알파벳별로 일정한 거리만큼 밀어서 다른 알파벳으로 치환하는 방식
ex) BEE 라는 단어를 시저암호를 이용하여 3글자씩 민다고 하면 EHH 가 된다

 

 

이와 같은 개념을 적용하여 원문(s)와 n 만큼 미는 수가 주어지고 그 결과를 출력하는 문제입니다.

AB 를 1만큼 밀면 BC가 됩니다.

풀이

  • Java의 경우 Character형과 ascii 코드를 이용하여 풀 수 있습니다.
  • Python의 경우 알파벳 리스트를 생성할 수 있는 ascii_lowercase와 ascii_uppercase를 활용했습니다.
  • import string을 한 뒤 list(string.ascii_lowercase)를 사용하면 ['a', 'b', 'c', ...]과 같은 소문자 list를 생성할 수 있습니다.
  • list이름.index(값)을 하면 해당 값이 있는 index를 알려줍니다.
  • 이를 이용해서 만약 소문자라면 소문자 리스트에서 해당 알파벳의 인덱스 + n을 합니다.
  • 주의해야할 점은 + n을 했는데 인덱스 범위를 넘어갈 수 있습니다. 예를 들면 원문이 z 인데 2만큼 밀면 z 뒤에는 소문자 알파벳이 없기 때문에 z+1은 a, z+2는 b가 됩니다. 이를 처리하기 위해서 % 26(알파벳 개수)을 사용한다면 IndexOutOfBounds 를 막을 수 있습니다.

전체 코드

import string

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

    small = list(string.ascii_lowercase)
    large = list(string.ascii_uppercase)

    for i in range(len(s)):
        if s[i] == ' ':
            answer += " "
            continue

        if s[i].islower():
            answer += small[(small.index(s[i]) + n) % 26]
        else:
            answer += large[(large.index(s[i]) + n) % 26]

    return answer

코딩테스트 연습 - 시저 암호

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr