운동하는 개발자/알고리즘, 코딩테스트

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