코딩테스트 문제/Hackerrank

[HackerRank] Caesar Cipher

왕초보코딩러 2023. 5. 15. 00:32
728x90

Python 1 Week Preparation Kit-day3

입력값 : 글자 수(n), 글자(s), 추가할 아스키코드값(k)

 

문자를 10진수로 변환 후, n 동안 반복

k=26일 시 다시 자기 자신이 됨. k/26해서 나머지 값을 더하면 됨(k=k%26)

알파벳이면 +k해서 변환, 알파벳이 아닌 다른 문자면 그대로 쓰고 출력

대문자일 때, 소문자일 때, 그 외 다른 문자일 때 세 가지로 나눔

  1. 대문자일 때: 결과값이 90보다 크면 결과값-90을 64에 더함(i=i-26)
  2. 소문자일 때: 결과값이 122보다 크면 결과값-122를 96에 더함(i=i-26)

 

 

def caesarCipher(s, k):
    k=k%26
    new_s=''	#새로운 변환 문자를 저장할 변수
    for i in s:
        i=ord(i)	#문자를 아스키코드로 변환
        if (i>=65 and i<=90):	#대문자일 경우
            i=i+k
            if i>90:
                i-=26
            new_s+=chr(i)
        elif (i>=97 and i<=122):	#소문자일 경우
            i=i+k
            if i>122:
                i-=26
            new_s+=chr(i)
        else:
            new_s+=chr(i)
    return new_s 
                

if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    n = int(input().strip())

    s = input()

    k = int(input().strip())

    result = caesarCipher(s, k)

    fptr.write(result + '\n')

    fptr.close()

 

 

 

 

오답

def caesarCipher(s, k):
    k=k%26
    new_s=''
    for i in s:
        i=ord(i)
        if (i>=65 and i<=90) or (i>=97 and i<=122):
            i=i+k
            if (i>90 and i<97):
                i=64+(i-90)
                new_s+=chr(i)
            elif(i>122):
                i=96+(i-122)
                new_s+=chr(i)
            else:                
                new_s+=chr(i)
        else:
            new_s+=chr(i)
    return new_s

이유: 소문자와 대문자 케이스를 나누지 않아서 변환 시 대문자가 소문자로 바뀌는 경우가 생김

ex) i가 W이고 k가 10이어서 87+10=97로 했을 때 a가 됨(원래 결과: G) 

 

 

[참고 자료]

https://shaeod.tistory.com/228

아스키코드 표

알파벳 26개

알파벳 소문자: 97~122 대문자: 65~90

 

https://blockdmask.tistory.com/432

 

[python] 파이썬 타입 변환, 형변환 (float, int, str, chr, bool)

안녕하세요. BlockDMask 입니다. 오늘은 간단하게 파이썬에서 데이터 타입을 변환할 수 있는 방법들에 대해서 알아볼것 입니다. 실수로 변환하는 float, 정수로 변환 하는 int, 문자열로 변환하는 str,

blockdmask.tistory.com

형변환

 

https://ddolcat.tistory.com/684

 

[Python] 파이썬 아스키코드(ASCII) 비교 및 변환 총정리 : ord(), chr(), hex()

파이썬에서 아스키코드를 문자로 변환하는 방법과 문자를 아스키코드로 변환하는 방법에 대해 알아봅니다. ord()함수를 사용하여 아스키코드로 변환할 수 있습니다. 반대로 chr()함수를 사용하여

ddolcat.tistory.com

문자->아스키코드: ord('문자')

아스키코드->문자: chr(숫자)

아스키코드 변환 시 int() 사용 불가능

'코딩테스트 문제 > Hackerrank' 카테고리의 다른 글

[HackerRank] New Year Chaos  (0) 2023.05.27
[HackerRank] Recursive Digit Sum  (0) 2023.05.16
[HackerRanck] Grid Challenge  (0) 2023.05.15