- 문제 : 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
'프로그래머스 > Level1' 카테고리의 다른 글
[월간 코드 챌린지 시즌1 / 프로그래머스] 68644번 : 두 개 뽑아서 더하기 (0) | 2022.08.24 |
---|---|
[Summer/Winter Coding(~2018) / 프로그래머스] 12982번 : 예산 (0) | 2022.08.24 |
[월간 코드 챌린지 시즌 1 / 프로그래머스] 68935번 : 3진법 뒤집기 (0) | 2022.08.24 |
[해시 / 프로그래머스] 42576번 : 완주하지 못한 선수 (1) | 2022.08.23 |
[2019 KAKAO BLIND RECRUITMENT/ 프로그래머스] 42889번 : 실패율 (1) | 2022.08.23 |