상세 컨텐츠

본문 제목

[programmers] 프로그래머스 시저 암호(Python)

Problem Solving/programmers

by HelloMinchan 2020. 6. 13. 00:58

본문

(주)그렙

[programmers] 프로그래머스 시저 암호

(Python)

(글쓴날 : 2020.06.13)

 


* programmers, 프로그래머스 문제 Python 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

프로그래머스 시저 암호


1) 문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12926 

 

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

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

programmers.co.kr


2) 풀이 과정

* 시간 복잡도 : O(n)

 

알파벳 소문자, 대문자, 공백으로 이루어진 문자열이 주어질 때, 각 알파벳들을 n만큼씩 민 순서의 알파벳으로 변환 시키는 문제입니다.

단, 'z' 혹은 'Z'를 넘어갈 경우 경우 각각 'a'와 'A'로 다시 돌아갑니다.

 

저의 경우, Python을 사용했습니다.

우선, ord() 함수를 이용해 주어지는 n만큼 알파벳들을 밀었을 때의 아스키코드를 구한 뒤, 'z' 혹은 'Z'일 경우, 소문자일 경우, 대문자일 경우로 각각 분기하여 처리하였습니다.

만약, 구한 아스키코드값이 'z' 혹은 'Z'이거나, 소문자 및 대문자인 경우 중 각각 'z'와 'Z'를 초과한 경우에 아스키코드값에서 알파벳의 개수인 26을 뺀 값에 해당하는 알파벳을 구하여 문제를 해결했습니다.


3) 코드

 

* Python 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def solution(s, n):
    answer = ''
    
    for alpha in s:
        if alpha != ' ':
            asciiNum = ord(alpha) + n
            
            if alpha == 'z' or alpha == 'Z':
                asciiNum -= 26
            elif alpha.islower():
                if asciiNum >= 97 + 26:
                    asciiNum -= 26
            else:
                if asciiNum >= 65 + 26:
                    asciiNum -= 26
            
            answer += chr(asciiNum)
            continue
            
        answer += alpha
        
    return answer

 

관련글 더보기

댓글 영역