본문 바로가기
Problem Solving/프로그래머스

[프로그래머스] 연습문제 "시저암호" (파이썬)

by 청량리 물냉면 2022. 5. 2.
반응형
문제

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

 

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

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

programmers.co.kr

 

 

코드
def solution(s, n):
    sList = list(s)		#sList에 입력받은 글자를 list형태로 잘라서 저장
    for i in range(len(sList)):	#sList 길이만큼 반복
        if sList[i].isupper():	#리스트에 든 글자가 대문자인 경우
            sList[i] = chr((ord(sList[i])-ord('A') +n) %26+ord('A'))
        elif sList[i].islower():	#소문자인 경우
            sList[i] = chr((ord(sList[i])-ord('a') +n) %26+ord('a'))
    return ("".join(sList))	#리스트의 글자를 합쳐 하나의 문자열로 return

 

 

 

코드 설명
        if sList[i].isupper():
            sList[i] = chr((ord(sList[i])-ord('A') +n) %26+ord('A'))
        elif sList[i].islower():
            sList[i] = chr((ord(sList[i])-ord('a') +n) %26+ord('a'))

ord(): 문자를 아스키 코드로 바꿔주는 함수

chr(): 아스키 코드를 문자로 바꿔주는 함수

 

ex. 입력이 B, 4인 경우

A의 아스키 코드 값 = 65

B의 아스키 코드 값 = 66

따라서 66 (ord(sList[i])) - 65 (ord('A')) + 4 (n) = 5

5 % 26 = 5

5 + 65 (ord('A')) = 70

chr(70) = F

 

 

 

마무리

문자열... 역시 어렵다...

반응형