프로그래머스 시저 암호

최준근·2021년 9월 28일
0

문제설명

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

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

생각하기

  1. str형식인 문자열을 리스트로 나눈다.
  2. 리스트안에 있는 요소들을 확인하면서 대문자, 소문자로 나눈다
  3. 아스키 검색한 i를 아스키 코드로 변환시켜주기
  4. 아스키 코드를 다시 문자로 변환하기
  5. 리스트안의 요소들을 합쳐주기

내 코드( 풀이 도움받음 )

def solution(s, n):
    ans = list(s)
    for i in range(len(ans)):
        if ans[i].isupper():
            ans[i] = chr((ord(ans[i]) - ord('A')+n)%26 + ord('A'))
        elif ans[i].islower():
            ans[i] = chr((ord(ans[i]) - ord('a') +n)%26 + ord('a'))
    return "".join(ans)

문제 해석

s를 리스트로 만들어각각 요소를 분리

for문으로 요소를 찾고 그 요소가 대문자인지 소문자인지 구분!

구분한 i를 아스키 코드를 이용해 변환 후 가장 작은 숫자인 a로 빼주기

이후 n을 더해주고 알파벳 개수인 26개로 나누어 주면 아스키 코드의 가장작은 문자인 a의 숫자로 부터 몇번째인지 나오고 실질적인 위치를 찾기위해 ord(a)를 더하면 찾고자 하는 위치가 반환된다.

리스트 안의 요소들을 ""join(ans)로 문자열 형태로 바꾸어준다.

profile
느려도 좋으니 꾸준하게

0개의 댓글