Wacky_Life

 

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

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

programmers.co.kr

 

 

문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

 

 

 

제한 조건

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

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

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

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

 

 

입출력 예

s n result
"AB" 1 "BC"
"z"  "a"
"a B z" 4 "e F d"

 

 

 

코드

1
2
3
4
5
6
7
8
def solution(s, n):
    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('a'))
    return "".join(s)
cs

 

 

2번째 줄 : 입력 받은 문자열을 쉽게 처리하기 위해 리스트로 변환한다.

 

3~7번째 줄 : 입력 받은 문자열의 길이만큼 for문을 반복한다. 문자열의 알파벳이 대문자일 경우와 소문자일 경우로 경우의 수를 나눈다. chr() 함수는 아스키 코드 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수이고 ord()는 chr()과 반대로 문자의 아스키 코드 값을 돌려주는 함수이다. 대문자일 경우 'A'의 아스키 코드 값은 65이고 뒤로 갈 수록 더 커져서 'Z'는 90이다. 따라서 입력받은 문자열의 알파벳을 ord()를 활용해서 아스키 코드 값을 구하고 65를 빼고 거리 n만큼 더한 뒤 대문자 알파벳의 개수인 26으로 나눈 나머지 만큼 65에 더하고 이를 다시 문자로 변환하여 저장한다. 소문자일 경우 위의 대문자와 같은 원리로 변환한다. 그리고 소문자, 대문자 뿐만 아니라 공백도 존재할 수 있으므로 단순히 else: 문을 써서 7번째 줄을 처리하면 안되고 elif를 써준다.

 

8번째 줄 : 리스트를 문자열로 변환해주는 join()를 활용해서 return 한다.

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading