반응형
문제주소 :programmers.co.kr/learn/courses/30/lessons/12926
<문제 설명>
더보기
문제 설명
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
입출력 예
s n resultAB | 1 | BC |
z | 1 | a |
a B z | 4 | e F d |
<풀이법>
▒ 한줄 개념: 아스키코드 ▒
문자열을 아스키 코드를 이용하여 변환하는 문제입니다.
다음은 아스키 코드 표입니다.
아스키 코드는 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계이다. 000(0x00)부터 127(0x7F)까지 총 128개의 부호가 사용된다. 이는 영문 키보드로 입력할 수 있는 모든 기호들이 할당되어 있는 부호 체계이며, 매우 단순하고 간단하기 때문에 어느 시스템에서도 적용가능하다는 장점이 있으나, 2바이트 이상의 코드를 표현할 수 없기 때문에 국제표준의 위상은 유니코드에게 넘어갔다. -위키피디아(namu.wiki/w/아스키코드)
아스키 코드는 위의 설명에서 말하듯이 영문키보드로 입력할 수 있는 모든 기호들이 숫자로 할당되어있습니다.
위 표에서 파란색 네모가 영문자이고, 초록색 네모가 해당 문자를 표현할 수 있는 숫자입니다.
파이썬에서는 ord(c)을 통해 c에 해당하는 아스키 코드 숫자를 얻을 수 있고, chr(n)을 통해 n에 해당하는 아스키 코드 기호를 얻을 수 있습니다. 아스키 코드에는 심지어 공백또한 아스키 코드에 존재합니다.(space)
따라서 이 두 함수를 이용하여 적절한 문자변환을 이루어 내면 됩니다.
<코드(Python)>
def solution(s, n):
pushed = ""
for c in s:
if ord(c) == 32:
pushed += " "
elif ord(c) + n > 90 and c.isupper():
pushed += chr(ord(c)+n - 26)
elif ord(c) + n > 122:
pushed += chr(ord(c)+n - 26)
else:
pushed += chr(ord(c)+n)
return pushed
더 많은 코드 보기(GitHub) : github.com/dwkim-97/CodingTest
반응형
'Programmers' 카테고리의 다른 글
[프로그래머스] 이상한 문자 만들기 / Python (0) | 2021.01.14 |
---|---|
[프로그래머스] 약수의 합 / Python (0) | 2021.01.14 |
[프로그래머스] 수박수박수박수박수박수? / Python (0) | 2021.01.13 |
[프로그래머스] 소수 찾기(Level 1) / Python (0) | 2021.01.13 |
[프로그래머스] 서울에서 김서방 찾기 / Python (0) | 2021.01.13 |