[Programmers] - 시저 암호

오동훈·2021년 4월 23일
0

Programmers

목록 보기
25/64
post-thumbnail

1. Problem 📃

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

다음 문제는, 문자열과 숫자가 주어질 때 문자열에 입력된 숫자만큼 떨어진 문자를 출력하는 문제입니다.

2. Logic 👨‍🏫

아스키코드를 이용해 범위를 나눠 풀었습니다.

3. Code 💻

1. 내가 푼 코드

def solution(s, n):
    answer = ''
    for i in range(len(s)):
        num = ord(s[i]) + n
        if s[i] == ' ':
            answer += ' '
        elif ('a' <= s[i] and s[i] <= 'z') and num < 97:
            answer += chr(num + 26)
        elif ('a' <= s[i] and s[i] <= 'z') and num > 122:
            answer += chr(num - 26)
        elif ('A' <= s[i] and s[i] <= 'Z') and num < 65:
            answer += chr(num + 26)
        elif ('A' <= s[i] and s[i] <= 'Z') and num > 90:
            answer += chr(num - 26)
        else:
            answer += chr(num)
    return answer

2. 다른 사람이 푼 코드

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

    return "".join(s)

4. Feedback 📚

1. chr()

아스키코드를 문자열로 변환해주는 함수입니다.

>>> chr(65)
A
>>> chr(90)
Z

2. ord()

문자열을 아스키코드로 변환해주는 함수입니다.

>>> ord('a')
97

>>> ord('z')
122

다른 사람이 푼 코드들을 보면서 이미 존재하는 라이브러리를 이용해 푸는 모습들을 많이 볼 수 있었고, 이 문제를 접하면서 앞으로 나도 그렇게 푸려고 노력해야겠다는 생각이 많이 들었다😊

profile
삽질의 기록들🐥

0개의 댓글