본문 바로가기

Problem Solving/Programmers

[프로그래머스] Level 2 시저 암호 | 파이썬

문제 설명

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

 

제한 조건

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

 

문제 풀이

def solution(s, n):
    s = list(s)
    l = []
    for i in s:
        if i >= 'A' and i <= 'Z':
            l.append(chr((ord(i)-ord('A')+ n)%26+ord('A')))
        elif i >= 'a' and i <= 'z':
             l.append(chr((ord(i)-ord('a')+ n)%26+ord('a')))
        else:
            l.append(' ')
    return ''.join(l)

알파벳을 하나씩 분리하기 위해 s를 리스트로 변환했다.

 

완성된 암호문을 담을 빈 리스트 l을 만들었다.

 

  • 리스트 s에 대한 반복문 for를 만들었다.
  • 알파벳 대문자와 소문자의 아스키코드 범위가 다르기 때문에 if문을 사용했다.
  • 문자열과 아스키코드 변환에는 함수 ord(), chr()를 사용했다. 
  • 이동할 값을 구하기 위해 ord(i)-ord('A')+n으로 계산했다.
  • 알파벳 범위를 벗어나지 않도록 %26을 추가했다.
  • 마지막에 ord('A')를 더하고 문자열로 변환시킨 후 리스트 l에 더했다.
  • i가 알파벳이 아닌 공백인 경우 ' '을 리스트 l에 더했다.

join() 함수를 사용해 결괏값을 반환했다.

 

다른 풀이

def solution(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)

 

빈 리스트를 따로 만들지 않고 바로 s를 변경할 수도 있었다.

 

🙋‍♂️isupper(), islower() in python 

: The functions isupper() and islower() returns the boolean True value if the all the characters of the string are in upper case or lower case respectively.

*출처: geeksforgeeks

 


 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

 

 

isupper(), islower(), lower(), upper() in Python and their applications - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org