코딩테스트 연습/프로그래머스

[Python] 프로그래머스 코딩테스트 LV1 - 시저 암호

환타몬 2022. 1. 22. 14:34

 

 

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

 

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

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

programmers.co.kr

 

1. 여담

생각보다 쉽지 않았다. 집중하기 힘든 환경이였어서 그럴 수도 있고.

 

2. 소스코드

def solution(s, n):
    answer = ''
    alp_li ="abcdefghijklmnopqrstuvwxyz" #알파벳 소문자 리스트가 될 문자열
    alp_d = alp_li.upper() # 알파벳 소문자 문자열을 대문자로 바꿔줌
    alp_li = list(alp_li) #알파벳 소문자 리스트
    alp_d = list(alp_d) # 알파벳 대문자 리스트 
    
    for i in s: # s의 각 요소 i를 반환 
        if i in alp_li: # 소문자 리스트 내에 i가 있다면
            answer += alp_li[(alp_li.index(i)+n)%26]
        elif i in alp_d: # 대문자 리스트 내에 i가 있다면
            answer += alp_d[(alp_d.index(i)+n)%26]
        else : # 공백일 경우
            answer +=" "

    return answer

 

3. 생각

시저암호를 구현할 때 우선 알파벳의 리스트를 만드는 것을 생각했다.

그 후 for문으로 주어진 매개변수 s를 돌면서 list내에 해당하는 것이 있으면 찾고, 그 인덱스에 n을 더해서 값을 반환하는 것으로 한다. 그리고 초과되는 것은 순환할 수 있도록 나머지를 구하는 연산자 %를 이용해서 순환하도록 했다.