시저 암호 - Python

2023. 10. 15. 18:11공부/📝 프로그래머스

1. 풀이 코드

def solution(s, n):
    small = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
             "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
    large = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
             "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
    answer = ''
    for item in s:
        if item in small:
            answer += small[(small.index(item) + n) % 26]
        elif item in large:
            answer += large[(large.index(item) + n) % 26]
        else:
            answer += item
    return answer


# Test Cases
print(solution("AB", 1))
print(solution("z", 1))
print(solution("a B z", 4))

  조금 힙하게 풀어볼까 싶어서 리스트를 선언했습니다.

 

2. 다른 사람 풀이 코드

1) 첫 번째 코드

# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
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)
    # 주어진 문장을 암호화하여 반환하세요.


# 실행을 위한 테스트코드입니다.
print('s는 "a B z", n은 4인 경우: ' + caesar("a B z", 4))

  chr(), ord()를 쓴다면 이렇게 풀겠습니다. 가독성이 좋네요.

 

2) 두 번째 코드

# 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
# 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
def caesar(s, n):
    lower_list = "abcdefghijklmnopqrstuvwxyz"
    upper_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    result = []

    for i in s:
        if i is " ":
            result.append(" ")
        elif i.islower() is True:
            new_ = lower_list.find(i) + n
            result.append(lower_list[new_ % 26])
        else:
            new_ = upper_list.find(i) + n
            result.append(upper_list[new_ % 26])
    return "".join(result)

  저는 리스트를 이용했는데 문자열로 하면 더 빠르게 풀었겠네요...

 


 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

'공부 > 📝 프로그래머스' 카테고리의 다른 글

숫자 문자열과 영단어 - Python  (0) 2023.10.16
짝지어 제거하기 - Python  (0) 2023.10.15
최소직사각형 - Python  (0) 2023.10.15
피보나치 수 - Python  (0) 2023.10.15
삼총사 - Python  (0) 2023.10.14