문제 설명
ROT13은 카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.
예를 들어, "Baekjoon Online Judge"를 ROT13으로 암호화하면 "Onrxwbba Bayvar Whqtr"가 된다. ROT13으로 암호화한 내용을 원래 내용으로 바꾸려면 암호화한 문자열을 다시 ROT13하면 된다. 앞에서 암호화한 문자열 "Onrxwbba Bayvar Whqtr"에 다시 ROT13을 적용하면 "Baekjoon Online Judge"가 된다.
ROT13은 알파벳 대문자와 소문자에만 적용할 수 있다. 알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다. 예를 들어, "One is 1"을 ROT13으로 암호화하면 "Bar vf 1"이 된다.
문자열이 주어졌을 때, "ROT13"으로 암호화한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
출력
첫째 줄에 S를 ROT13으로 암호화한 내용을 출력한다.
예제 입출력
Baekjoon Online Judge | Onrxwbba Bayvar Whqtr |
One is 1 | Bar vf 1 |
코드 및 설명
s = input()
rot13 = 13
upper_ord = 122
lower_ord = 90
answer = ""
for char in s:
if char == " ":
answer += char
elif char.isalpha():
ord_char = ord(char)
if ord_char >= 97:
if ord_char+rot13 > upper_ored:
answer += chr((ord_char + rot13) - upper_ored + 96)
else:
answer += chr(ord_char + rot13)
else:
if ord_char+rot13 > lower_ord:
answer += chr((ord_char + rot13) - lower_ord + 64)
else:
answer += chr(ord_char + rot13)
else:
answer += char
print(answer)
이 문제는 입력된 문자열을 받아 ROT13이라는 암호화 방식을 이용하여 문자열을 바꾸는 것이다.
ROT13은 영어 알파벳을 13글자씩 밀어서 암호화하는 방식이다.
일단 아스키코드로 변경해서 작업해야할 것 같다고 먼저 생각했고, 아스키코드에서 13글자 지난 후 다시 chr로 변환하여
해당되는 문자로 바꿔주면 될 것이다.
공백에 대한 처리 후 알파벳인지 확인
ord_char >= 97 이면 소문자를 걸어내는 것이다.
ord_char+rot13을 했을 때 엇... 변수를 잘못지정했네;;; upper_ord가 아니라 lower_ord로 했어야했는데... 이런.. 이건 뭐 넘
넘어가고 지정된 범위를 넘어가게 되면 다시 한 바퀴를 돌아서 처음부터 범위를 넘기전 값을 첫번째 값부터 다시 가야한다.
그러므로 answer += chr((ord_char + rot13) - upper_ored + 96) 이게 나오게 된 것이다.
반복해주고 answer에 값을 더 해주면 정답을 찾을 수 있다.
'삽집하는 개발들 > 알고리즘' 카테고리의 다른 글
[98일차] 최대공약수와 최소공배수 - 백준 - 2609(python - 정수론, 유클리드 호제) (0) | 2023.12.17 |
---|---|
[98일차] 접미사 배열 - 백준 - 11656(python - 문자열, 정렬) (21) | 2023.12.17 |
[97일차] 주식가격 - 프로그래머스 - 42584(python - 스택/큐) (1) | 2023.12.16 |
[96일차] 문자열 분석 - 백준 - 10820(python - 문자열) (3) | 2023.12.15 |
[96일차] 알파벳 찾기- 백준 - 10809(python - 문자열) (1) | 2023.12.15 |