[프로그래머스]시저암호
2021. 9. 15. 03:22ㆍAlgorithm
시저암호는 문자열 s에 있는 알파벳들을 n만큼 밀어서 다른 알파벳으로 만드는 암호화 방식이다.
조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
소문자와 대문자는 따로 생각하는 것!
최종작성한 코드이다.
def solution(s, n):
answer = "" #민 문자열을 저장할 변수
al_big = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #대문자 리스트
al_small="abcdefghijklmnopqrstuvwxyz" #소문자 리스트
i=0 #s문자열을 인덱싱할 값
for alpha in s:
ss=""
if alpha == " ":
ss=s[i]
elif alpha in al_big:
al_index = al_big.index(alpha)
if al_index+n>25:
al_index=al_index-26
ss=al_big[al_index+n]
elif alpha in al_small:
al_index = al_small.index(alpha)
if al_index+n> 25:
al_index=al_index-26
ss=al_small[al_index+n]
i+=1
answer+=ss
return answer
#참고한 함수
list.index("A") : list에서 "A"의 인덱스
#알파벳 리스트에서 앞으로 넘어가는 부분을 고려하는게 어려웠다.
s아이템의 값이 Z/z일 때를 고려하기보다는, 현재 인덱스에서 밀어야할 n을 더한 값이 25(알파벳리스트의 마지막인덱스)를 넘어가면 어떻게 할지를 고려해야 함.
#아스키코드 이용해서 풀면 깔끔!
알파벳리스트로 작성한 부분을 아스키코드를 이용해 작성할 수 있음
#ord: 문자를 아스키코드로 변환
#chr: 아스키코드를 문자로 변환
'Algorithm' 카테고리의 다른 글
[프로그래머스] 점프와 순간 이동 (0) | 2023.02.20 |
---|---|
[프로그래머스] N개의 최소공배수 (0) | 2023.02.20 |
JavaScript의 match함수 (0) | 2023.02.13 |
[프로그래머스] 게임 맵 최단거리 (0) | 2023.02.12 |
[프로그래머스]두 정수 사이의 합 (1) | 2021.09.24 |