728x90
반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
"""
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로
바꾸는 암호화 방식을 시저 암호라고 합니다.
예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다.
"z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아
s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
"""
from collections import deque
def solution(s, n):
big = deque([chr(i) for i in range(ord('A'), ord('Z')+1)])
small = deque([chr(i) for i in range(ord('a'), ord('z')+1)])
big.rotate(-n)
small.rotate(-n)
answer = ''
for w in s:
if 'a' <= w <= 'z':
answer += small[ord(w)-ord('a')]
elif 'A' <= w <= 'Z':
answer += big[ord(w)-ord('A')]
else:
answer += w
return answer
"""
민다고 해서 deque의 rotate가 생각났다.
먼저 대문자와 소문자를 리스트로 만들어주었다.
그리고 rotate로 n만큼 돌려주었다.
+n은 오른쪽으로 -n은 왼쪽으로 돌리는 것이다.
문장을 차례대로 읽어서 소문자와 대문자일때는 리스트에서 매칭시켰고
아니라면 그대로 answer에 넣었다.
[chr(i) for i in range(ord('A'), ord('Z')+1)]를 해석하면
chr은 해당숫자를 문자로 매칭시키는것이다.
아스키코드표를 참고하면 되는데 95 = 'a'가 된다.
ord는 chr의 반대인데 'a' = 95가 된다.
그렇기 때문에 ord('A'), ord('Z')+1은 65, 91이 된다.
answer += small[ord(w)-ord('a')] 이부분은 리스트와 매칭시키기 위함이다.
ord(w)는 s문장에서 나온 한글자를 숫자로 바꾼다.
if문에서 소문자임을 확인했기 때문에 ord('a')를 빼주면 인덱스값이 나온다.
예를 들어 w가 'a'라면 95-95를 하여 0이 된다.
그럼 원래 'a'는 small list에 0번째 위치에 있었기 때문에 매칭이 된다.
"""728x90
반응형
'개발 > 문제풀이' 카테고리의 다른 글
| 프로그래머스 '푸드파이트 대회' 파이썬 풀이 (0) | 2023.02.20 |
|---|---|
| 프로그래머스 탐욕법(greedy) '체육복' 파이썬 풀이 (0) | 2023.02.19 |
| 프로그래머스 2018 KAKAO BLIND RECRUITMENT[1차] '다트 게임' 파이썬 풀이 (0) | 2023.02.19 |
| 프로그래머스 '입문' Lv.0 풀이 완료 (0) | 2023.02.18 |
| 프로그래머스 '유한소수 판별하기' 파이썬 풀이 + (0) | 2023.02.18 |
댓글