728x90
Python 1 Week Preparation Kit-day3
입력값 : 글자 수(n), 글자(s), 추가할 아스키코드값(k)
문자를 10진수로 변환 후, n 동안 반복
k=26일 시 다시 자기 자신이 됨. k/26해서 나머지 값을 더하면 됨(k=k%26)
알파벳이면 +k해서 변환, 알파벳이 아닌 다른 문자면 그대로 쓰고 출력
대문자일 때, 소문자일 때, 그 외 다른 문자일 때 세 가지로 나눔
- 대문자일 때: 결과값이 90보다 크면 결과값-90을 64에 더함(i=i-26)
- 소문자일 때: 결과값이 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
형변환
https://ddolcat.tistory.com/684
문자->아스키코드: 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 |