운동하는 개발자/알고리즘, 코딩테스트
HackerRank [String] Caesar Cipher /알고리즘 해커랭크
우용현
2021. 4. 23. 00:35
728x90
문제주소 : https://www.hackerrank.com/challenges/caesar-cipher-1/problem
난이도 : Easy
성공률 : 86%
문제 : 문자열 s를 k만큼 쉬프트 시켜라, 특수문자 제외, z를 넘어가면 다시 a로 돌아온다
풀이 :
1. k 값이 100이하의 수 이므로 선처리로 26의 나머지값만 쉬프트
2. 대문자 아스키값+k 했을때 소문자 영역에 들어갈 수 있으므로 기존 문자가 대문자인지 소문자인지 확인하는 조건 추가
답안
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the caesarCipher function below.
def caesarCipher(s, k):
k = k% 26
result:str = '';
temp:str = '';
for i in s:
temp = chr(ord(i) + k)
if i <= 'Z' and i >= 'A':
if temp > 'Z':
result += chr(ord(temp) - 26)
else:
result += temp
elif i <= 'z' and i >= 'a':
if temp > 'z':
result += chr(ord(temp) - 26)
else:
result += temp
else:
result += i
continue
return result
if __name__ == '__main__':
# fptr = open(os.environ['OUTPUT_PATH'], 'w')
fptr = sys.stdout
n = int(input())
s = input()
k = int(input())
result = caesarCipher(s, k)
fptr.write(result + '\n')
fptr.close()
느낀점
더보기
간단했으나 문제에서 특수문자는 - 만 있는듯이 설명해놔서 한번실패하고
대문자 아스키값+ k를 했을 때 소문자 아스키값 범위에 들어가서 정상이라고 처리하는 실수해서 두번 실패했다
간단한 문제인데 괜히 시간뺏기기 좋은 실수를 함
사실 빨리 풀고 자고싶어서 대충 읽어서...
728x90