반응형
문제
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
마무리
문자열... 역시 어렵다...
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 "부족한 금액 계산하기"(파이썬) (0) | 2022.05.05 |
---|---|
[프로그래머스] 연습문제 "x만큼 간격이 있는 n개의 숫자"(파이썬) (0) | 2022.05.04 |
[프로그래머스] 연습문제 "핸드폰 번호 가리기"(파이썬) (0) | 2022.05.02 |
[프로그래머스] 완전탐색 "모의고사" (파이썬) (0) | 2022.04.30 |
[프로그래머스] 월간 코드 챌린지 시즌2 "음양 더하기" (파이썬) (0) | 2022.04.25 |
[프로그래머스] 월간 코드 챌린지 시즌3 "없는 숫자 더하기" (파이썬) (0) | 2022.04.25 |