프로그래머스/Level1
[연습문제 / 프로그래머스] 12926번 : 시저 암호
ydin
2022. 8. 28. 23:35
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12926
Level 1문제이고, 스스로 푼 문제다!
맨 아래있는 풀이로 처음에 작성했으나 61.5%에서 틀리길래 왜 그런지 생각해봤다
문제에 의하면 소문자는 소문자로 이동하고, 대문자는 대문자로 이동해야하는데
대문자의 아스키 코드는 65 ~ 90
소문자의 아스키 코드는 97 ~ 122
대문자에 n(1 ~ 25)을 더한 값의 범위는 66 ~ 115 이다. 이때 97 ~ 115인 경우는 소문자의 영역이므로 문자의 order값에 n을 더한 값이
97 ~ 115라면 이게 소문자에서 시작한 건지, 대문자에서 시작한건지 모호하다
소문자인 경우와 대문자인 경우로 나누어서 진행하고 n을 더한값이 해당 문자의 끝을 넘어간다면 n을 더한 order 값에서 26을 빼주는 로직으로 하면 정답이 뜬다
- 정답 풀이 :
def solution(s, n):
s = list(s)
answer = ''
for i in range(len(s)):
if 65 <= ord(s[i]) <= 90:
num = ord(s[i]) + n
if 65 <= num <= 90:
s[i] = chr(num)
elif num > 90:
s[i] = chr(num - 26)
elif 97 <= ord(s[i]) <= 122:
num = ord(s[i]) + n
if 97 <= num <= 122:
s[i] = chr(num)
elif num > 122 :
s[i] = chr(num - 26)
for i in range(len(s)):
answer += s[i]
return answer
- 시도해본 풀이
이렇게 풀면 안된다!
def solution(s, n):
s = list(s)
answer = ''
#이동한게 'A'부터 'Z' 사이
if 65 <= ord(s[i]) + n <= 90:
s[i] = chr(ord(s[i]) + n)
#'a'이상 문자가 이동한게 'a'부터 'z'사이
elif 97 <= ord(s[i]) + n <= 122 :
s[i] = chr(ord(s[i]) + n)
#이동한게 'Z'를 벗어남
elif 90 < ord(s[i]) + n < 116 :
s[i] = chr(ord(s[i]) + n - 26)
#'z'보다 큰 경우
elif 122 < ord(s[i]) + n :
s[i] = chr(ord(s[i]) + n - 26)
for i in range(len(s)):
answer += s[i]
return answer