T.I.L May 23, 2023 (프로그래머스 Lv.1 시저 암호 - 파이썬)

2023. 5. 24. 06:24T.I.L (Today_I_Learned)

접근


'''
1. 대문자 문자열, 소문자 문자열 준비
    => 주어지는 문자열 s 안에 문자들을 index 값에 따라 대문자 문자열에 있는지 소문자 문자열에 있는지 찾아봄
    => 대문자 문자열에 있거나 소문자 문자열에 있다면 해당 되는 인덱스 값에 + 주어진 n 값

2. 마지막 문자열 이후에 다시 처음으로 순환되게 하려면...?
    => 'z' or 'Z'의 index 값은 25
    => 만약 주어진 n의 값이 1 이라면?
    => index 값은 26이 됨
    => index 값 26이 됐을때 'a' or 'A'를 표현하고 싶기 때문에 26으로 나눈 나머지 값을 활용해야 하겠음
    => 따라서 26으로 나눈 나머지 값을 계속 활용하면 되겠음

3. 공백은 어떻게 처리할 수 있을까(그냥 둬도 되려나)
    => 공백을 추가해버리자
'''

 

풀이


def solution(s, n):
    lower_str = "abcdefghijklmnopqrstuvwxyz" # 인덱스 = 0 ~ 25
    upper_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 인덱스 = 0 ~ 25
    answer = ""

    for str in s:
        if str in lower_str:
            idx = lower_str.find(str) + n # .find(str)을 사용하여 lower_str 문자열에서 str의 index 추출 하고 + n
            answer += lower_str[idx % 26]

        elif str in upper_str:
            idx = upper_str.find(str) + n # .find(str)을 사용하여 upper_str 문자열에서 str의 index 추출 하고 + n
            answer += upper_str[idx % 26]

        else: # 공백일 경우 answer에 공백 추가
            answer += " "
    return answer