본문 바로가기
문제풀이/Programmers

[프로그래머스💯] 코딩테스트 연습 > 연습문제 > 시저 암호 🔒

by 서상혁 2020. 6. 8.

<프로그래머스 문제풀이>

<출처 : 프로그래머스(Programmers)>

 


해답)

 

def solution(s, n):
    def convert(char):
        if char == " ":
            return " "
        elif ord(char) <= 90:  # 대문자일때  (아스키가 65~90)
            return chr(((ord(char)-65+n) % 26) + 65)
        else:  # 소문자일때 (아스키가 97~122)
            return chr(((ord(char)-97+n) % 26) + 97)

    sList = list(s)
    converted = list(map(convert, sList))
    return "".join(converted)

 

 

풀이)

* ord(char) : char 에 해당하는 ascii 코드의 숫자를 반환합니다.

* chr(n) : 아스키코드 n(정수) 에 해당하는 문자를 반환합니다.

 

1. 한 문자를 받아, n만큼 민 문자을 반환하는 conver 함수를 만들었습니다.

2. map을 통해 string안에 모든 char들에 대해 작업을 수행합니다.

 


convert 함수의 원리

 

a~z 의 아스키코드는 97~122

A~Z 의 아스키 코드는  65~90

 

대문자라면 65 만큼을 빼서 n만큼 밀고 26 의 나머지를 이용해 얼마나 밀렸는지를 계산합니다.

소문자라면 97 만큼을 빼서 n만큼 밀고 26 의 나머지를 이용해 얼마나 밀렸는지를 계산합니다.

 

이 방식 예시

 

Z : 90

n : 1

Z를 1만큼 민다면, 

(90-65+1 % 26) = 0       * A~Z 중 0번째 인덱스라는 의미 입니다.

0 + 65 = 65 (A)

  

 

 

* 이 문제 및 로고의 저작권은 Programmers에 있습니다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

728x90

댓글