본문 바로가기
*Algorithm/Programmers_Level1

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

by codinguser 2020. 10. 10.

프로그래머스
(주)그렙

 

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

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제

 

 

 

프로그래머스 Level1 시저 암호


1) 문제

 

프로그래머스 시저 암호

 

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

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

programmers.co.kr

 

 

< 문제 구조화 >

 

제한 조건

 

    1. 공백 - > 공백

          밀어도(n)

 

    2. s 길이 < = 8000(s는 알파벳 소,대문자,공백 3개로만 구성)

 

    3. 1 <= n(자연수) <= 25

 



s = "AB" - > result = "BC"
           n = 1

s = "z" - > result = "a"
           n = 1

s = "a B z" - > result =  "e F d"
           n = 4

 


2) 풀이 과정

 

1. 구분을 대/소문자/공백 있음으로 나눠서 생각해야 겠구나.

2. 문자열 이니까 인덱스를 활용해서 1만큼 올려주면 되는데, z - > a갈 때는 어떻게 하면 좋을까?
나머지를 활용하면 되겠다.


ㄴ>1) 26(문자 개수)보다 작을 경우에는 26으로 나눈 나머지는 그 문자를 의미하겠구나


    Ex)
    1(index) % 26(문자 개수) - > 1(b)

    문자열
    : a ~ z = 26개

    인덱스번호
    : 0 ~ 25 = 26개

ㄴ>2) 26이상일 경우(.find(char)+n)이기에 26으로 나눈 나머지가 0이 되기 때문에 활용


    Ex)
    26 % 26 - > 0(a)

 

    27 % 26 - > 1(b)


3) 코드

 

(1) 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(s, n):
    answer = ''
    
    low = "abcdefghijklmnopqrstuvwxyz"
    up = low.upper()
    
    for char in s:
 
        if(char in low):
            index = low.find(char) + n
            answer += low[index % 26]
            
        elif(char in up):
            index = up.find(char) + n
            answer += up[index % 26]
            
        else:
            answer += " "
 
    return answer
cs

 

 

 


4) 정리 노트

 

(1)

 

1
2
3
4
5
6
7
8
9
10
11
12
= "AB"
= 1
answer = ''
 
low = "abcdefghijklmnopqrstuvwxyz"
up = low.upper()
 
for char in s:
    print(char)
    
# A
# B
 
cs

 

 

(2)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
= "AB"
= 1
answer = ''
 
low = "abcdefghijklmnopqrstuvwxyz"
up = low.upper()
 
for char in s:
    if(char in up):
            index = up.find(char)
    print(index)
    
# 0
# 1
 
cs

 

(3)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
= "AB"
= 1
answer = ''
 
low = "abcdefghijklmnopqrstuvwxyz"
up = low.upper()
 
for char in s:
    if(char in up):
            index = up.find(char) + n
    print(index)
    
# 1
# 2
 
cs

* 소스 코드 및 정리한 내용의 저작권은 글쓴이에게 있습니다.

 

 

 

댓글