[프로그래머스 / lv.1] 시저 암호
in Problem Solving on Programers
날짜: 2021년 5월 31일
소요 시간: 33분 39초
카테고리: 수학 문제
태그: 레벨1
, 파이썬
입출력 예시
s | n | result |
---|---|---|
“AB” | 1 | “BC” |
“z” | 1 | “a” |
“a B z” | 4 | “e F d” |
내가 적은 코드
def solution(s, n):
alphabet = 'abcdefghijklmnopqrstuvwxyz'
answer = list()
for i in range(0,len(s)):
if s[i].isupper():
for j in range(0, len(alphabet)):
if s[i] == alphabet[j].upper():
answer.append(alhpabet[(j+n)%26].upper())
break
if s[i].islower():
for k in range(0, len(alphabet)):
if s[i] == alphabet[k]:
answer.append(alphabet[(k+n)%26])
break
if s[i] == " ":
answer.append(" ")
return "".join(answer)
풀이 과정
문자열 s
의 원소가 대문자인 경우 (첫번째 조건) 알파벳 소문자로 이루어진 문자열 alphabet
을 대문자화 하여 answer
에 저장
문자열 s
의 원소가 소문자인 경우 (두번째 조건) 알파벳 소문자로 이루어진 문자열 alphabet
을 answer
에 저장
문자열 s
의 원소가 공백인 경우 (세번째 조건) 공백을 answer
에 저장
n번째 원소가 26번째(z번쨰보다 큰 수)일 경우 26으로 나눈 나머지 번째의 원소(다시 a로 돌아감)를 출력
리스트 형인 answer
에 저장 되어있는 원소를 문자형으로 출력하기 위해 join()
함수를 사용
베스트 코드
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)
반성
- 시프트로 푸는 방법을 생각은 했으나
ord()
와chr()
함수를 몰라서 코드화 할 수 없었다. - 더 많은 파이썬 모듈이나 함수를 알면 더 효율적으로 코드를 짤 수 있다. 파이썬에 대한 공부가 더 필요하다.