[프로그래머스 / 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()함수를 몰라서 코드화 할 수 없었다. - 더 많은 파이썬 모듈이나 함수를 알면 더 효율적으로 코드를 짤 수 있다. 파이썬에 대한 공부가 더 필요하다.
