[프로그래머스] Lv1. 시저 암호
접근 방법
- 문장의 알파벳을 하나씩 아스키코드로 바꾼 뒤 n 만큼 밀어줌
이전에 C++로 풀었던 내용
#include <string>
#include <vector>
using namespace std;
string solution(string s, int n) {
string answer = "";
for(int i = 0; i < s.size(); i++){
if('a' <= s[i] && s[i] <= 'z' && s[i] + n > 'z')
answer += (s[i] + n -26);
else if('A' <= s[i] && s[i] <= 'Z' && s[i] + n > 'Z')
answer += (s[i] + n -26);
else if(s[i] == ' ')
answer += ' ';
else
answer += s[i] + n;
}
return answer;
}
나의 풀이
def solution(s, n):
answer = ''
for c in s:
temp = ord(c) + n
if ('A' <= c and c <= 'Z') and temp > 90:
answer += chr(temp - 26)
elif ('a' <= c and c <= 'z') and temp > 122:
answer += chr(temp - 26)
elif c == ' ':
answer += ' '
else:
answer += chr(ord(c) + n)
return answer
밀었을 때 알파벳을 범위를 넘어가는 문자들 처리해주는 것은 금방 해결했지만
알파벳의 대소문자 사이의 간격이 26이 안된다는 점에서 처리하는게 까다로웠다.
아스키코드 표를 보며.. 하나하나 조건을 따져 직접 넣어주었다ㅜㅜ
다른 사람의 풀이
def solution(s, n):
answer = ''
for c in s:
if c.isupper():
answer += chr((ord(c)-ord('A')+ n)%26+ord('A'))
elif c.islower():
answer += chr((ord(c)-ord('a')+ n)%26+ord('a'))
else:
answer += c
return answer
대,소문자를 구별해주는 메서드가 있었다니...
알파벳을 밀었을 때 z를 넘어가는지 안넘어가는지 크기로 비교할게 아니라 나머지를 이용하면 됐다니...
아직 문자열 다루는 것이 많이 미숙한 것 같다 ( ˃̣̣̥᷄⌓˂̣̣̥᷅ )
Author And Source
이 문제에 관하여([프로그래머스] Lv1. 시저 암호), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chaen805/프로그래머스-Lv1.-시저-암호저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)