문제.
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"으로 암호화한 다음 출력하는 프로그램을 작성하시오.
답:
arr=input()
ans=''
for i in arr:
if i.islower():
print(chr(97+(ord(i)+13-97)%26), end='')
elif i.isupper():
print(chr(65+(ord(i)+13-65)%26), end='')
else:
print(i,end='')
- 먼저 문자열을 받는다. (arr)
- ans는 출력 문자열을 저장하기 위함이다.
- if i.islower()::
- **i**가 소문자인지 확인한다. 소문자인 경우 ROT13 암호화를 적용하게 된다.
- print(chr(97 + (ord(i) + 13 - 97) % 26), end=''):
- ord(i): 현재 문자의 아스키(ASCII) 코드 값을 반환한다.
- ord(i) + 13: 현재 문자의 아스키 코드에서 13을 더해 ROT13 변환을 적용한다.
- 97: 소문자 'a'의 아스키 코드 값. **i**의 아스키 코드에서 97을 빼고 %26을 적용하여 'a'부터 'z'까지 순환하는 형태를 만든다.
- chr(): 계산된 아스키 코드 값을 다시 문자로 변환하여 출력하는 함수.
- end='': 출력할 때 줄 바꿈 없이 이어서 출력하는 함수.
- elif i.isupper()::
- **i**가 대문자인지 확인한다. 대문자인 경우에도 같은 방식으로 ROT13 암호화를 적용하게 된다.
- 차이점은 대문자 'A'의 아스키 코드 값인 **65**를 기준으로 변환하는 것.
- else::
- 문자가 알파벳이 아닌 경우 (숫자, 공백, 특수 문자 등)은 변환하지 않고 그대로 출력.
> 즉 요약하자면, if문을 이용해서 경우의 수를 나누어서 출력하는 것이다.
'백준 (코테)' 카테고리의 다른 글
30. 접미사 배열(11656) (0) | 2024.09.23 |
---|---|
29. 네 수(10824) (0) | 2024.09.22 |
27. 문자열 분석(10820), 단어 길이 재기(2743) (1) | 2024.09.15 |
26. 알파벳 개수(10808), 알파벳 찾기(10809) (1) | 2024.09.14 |
25. 후기표기식2(1935), 후기표기식(1918) (0) | 2024.09.13 |