def caesarCipher(s, k):
# Write your code here
length = len(s)
str_list = list(s)
k %= 26
for i in range(length):
char_ord = ord(str_list[i])
if char_ord >= ord('A') and char_ord <= ord('Z'):
if char_ord + k > ord('Z'):
diff = ord('Z') - char_ord
index = (ord('A')-1) + (k-diff)
str_list[i] = chr(index)
else:
str_list[i] = chr(char_ord+k)
elif char_ord >= ord('a') and char_ord <= ord('z'):
if (char_ord+k) > ord('z'):
diff = ord('z') - char_ord
index = (ord('a')-1) + (k-diff)
str_list[i] = chr(index)
else:
str_list[i] = chr(char_ord+k)
return ''.join(str_list)
이번 문제는 주어진 문자열을 아스키 코드 기준으로 k 만큼 이동하여 변환시키는 문제이다.
단순히 k만큼만 더해주면 되는 줄 알았는데 테스트케이스가 몇개씩 틀려서 확인해본 결과, 생각보다 조건들을 많이 고려해야 하는 문제였다. 이번 문제를 통해 배운 점은 다음과 같이 정리할 수 있다.
- 문자를 아스키코드 수로 변환하는 함수는 ord(), 아스키코드 수를 문자로 변환하는 함수는 chr() 이다.
- 알파벳 대문자와 소문자는 32만큼 차이가 난다.
- 문제를 제대로 읽지 않고 테스트케이스를 하나씩 맞추는 것 보다, 문제와 전제조건을 정확히 읽고 확실하게 푸는 것이 훨씬 효율적이므로 문제를 제대로 읽는 연습을 하자 ⭐️⭐️⭐️
'Algorithm 💡 > String' 카테고리의 다른 글
[프로그래머스] 숨어있는 숫자의 덧셈(2) (0) | 2023.07.20 |
---|---|
[프로그래머스] OX퀴즈 (0) | 2023.07.20 |
[프로그래머스] 문자열 계산하기 (0) | 2023.07.20 |
[프로그래머스] 옹알이(1) (0) | 2023.07.18 |
[HackerRank] Two Characters (0) | 2023.05.19 |