프로그래머스 - 시저암호 (with python)

rivermt·2023년 5월 9일
0

programmers

목록 보기
2/6

문제

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

어떤 문장이 주어졌을 때 각 알파벳을 일정 거리만큼 밀어서 새로운 문자열을 만들어야 한다. 문자열은 알파벳 소문자, 대문자, 공백으로만 이루어져 있으며 공백인 경우는 따로 밀지 않고 공백을 유지한다.

풀이

문자를 일정 거리만큼 밀어야하므로 아스키 코드를 활용했다. (ord() 함수 )

어떤 문자 ch 가 있고 n 만큼 밀어야 한다면

# 소문자
ord(ch) - ord('a') + n % 26 + ord('a')

# 대문자
ord(ch) - ord('A') + n % 26 + ord('A')

위 식을 통해 알파벳의 위치를 알아내고 ord('a'), ord('A') 를 각 경우에 더해줘서 아스키 코드화 시킨다. 그리고 이를 문자로 만들기 위해 chr() 함수를 사용하면 된다.

def lower_push(ch, n):
    return chr((ord(ch) - ord('a') + n) % 26 + ord('a'))

    
def upper_push(ch, n):
    return chr((ord(ch) - ord('A') + n) % 26 + ord('A'))

공백의 경우에는 바꿀 문자열에 그대로 공백을 더해주면 되고 주어진 문자열을 for문을 통해 탐색하면서 소문자인지 대문자인지를 구분하여 새로운 문자열을 생성해주면 된다.

CODE

def lower_push(ch, n):
    return chr((ord(ch) - ord('a') + n) % 26 + ord('a'))

    
def upper_push(ch, n):
    return chr((ord(ch) - ord('A') + n) % 26 + ord('A'))


def solution(s, n):
    answer = ''
    for ch in s:
        if ch == ' ':
            answer += ch
        elif ch.islower():
            answer += lower_push(ch, n)
        else :
            answer += upper_push(ch, n)
        
    return answer
profile
화이팅!!

0개의 댓글