728x90
문제
내 풀이
capital = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lower = 'abcdefghijklmnopqrstuvwxyz'
def solution(s, n):
answer = ''
for i in range(len(s)):
if s[i] in capital:
after_idx = capital.index(s[i]) + n
if after_idx > 25:
after_idx = after_idx - 26
answer += capital[after_idx]
elif s[i] in lower:
after_idx = lower.index(s[i]) + n
if after_idx > 25:
after_idx = after_idx - 26
answer += lower[after_idx]
else: #공백
answer += " "
return answer
📌 먼저 대문자와 소문자 모음 문자열을 만들었다.
📌 그리고 s를 for문으로 돌리면서 각 문자열에 있는지 검사했다.
📌 해당 글자가 있다면 해당 글자의 인덱스에 n을 더하고 난 후의 인덱스로 글자를 찾아 반환했다.
다른 사람 풀이
def caesar(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)
✍🏻 isupper(), islower:() 해당 글자가 대문자인지 소문자인지 판단해 boolean으로 값을 반환해주는 메서드이다.
👉🏻 이 메서드를 사용하면 나처럼 굳이 대문자, 소문자 알파벳 문자열을 안 만들어 된다!
✍🏻 chr(), ord(): 아스키 코드를 문자열로, 문자열을 아스키 코드로 변환해준다.
👉🏻 이 메서드를 사용하면 나처럼 해당 글자 인덱스가 25를 넘었을 경우의 예외처리를 안 해줘도 된다!
✍🏻 "".join(list): list를 넣어주면 해당 리스트의 값들 사이에 구분자를 넣어 하나의 문자열로 합쳐준다.
👉🏻 리스트를 문자열로 편하게 바꿔준다!
728x90
'그 땐 Algorithm했지 > 그 땐 Programmers했지' 카테고리의 다른 글
[self-study/level 1] SQL | 모든 레코드 조회하기 | SELECT (0) | 2022.02.26 |
---|---|
[self-study/level 1] 체육복 | 탐욕법(Greedy) - 도전편 (1) | 2022.02.25 |
[TAVE/level 2] 튜플 (0) | 2022.02.24 |
[TAVE/level 1] 나머지가 1이 되는 수 찾기 (0) | 2021.12.22 |
[TAVE/level 1] 문자열 다루기 기본 (0) | 2021.12.20 |