Level 1. 시저 암호

Pear_Mh·2021년 6월 17일
0

Programmers-Level 1.

목록 보기
33/49

33. 시저 암호

코딩테스트 연습 > 연습문제 > 시저 암호
https://programmers.co.kr/learn/courses/30/lessons/12926


문제 설명

Input value =

  • s = 알파벳으로 구성된 문자열

  • n = shift 시키는 정도

Output value =

  • s에서 shift 된 후의 문자열

제한 조건

ㆍ 공백은 아무리 밀어도 공백입니다.

ㆍ s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.

ㆍ s의 길이는 8000이하입니다.

ㆍ n은 1 이상, 25이하인 자연수입니다.


문제 구상

#00
s = 'A B'
n = 1

s = list(s)

#01
chr((ord(s[0])-ord('A')+n)%26+ord('A'))

26개씩 반복되는 점을 이용하여, 유니코드 코드 포인트로 변환 후 계산 및 문자열 변환

#02
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('b'))
#03
''.join(s)

대문자,소문자 일 경우를 선택(isupper,islower)을 이용하여 선택 변환


문제 풀이

def solution(s):
    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('b'))
    return ''.join(s)

# Code test
s = 'A a b'
solution(s)

마치며

  1. chr/ord 를 이용하여 문자를 shift 가능하다.

  2. isupper/islower() 함수에 대해 이해하였다.

profile
Beyond the new era.

0개의 댓글