티끌모아 태산

[백 준/구현] 11655: ROT13 본문

백준 문제/문자열,누적합,구현

[백 준/구현] 11655: ROT13

goldpig 2023. 12. 27. 14:05
728x90

https://www.acmicpc.net/problem/11655

 

11655번: ROT13

첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다.

www.acmicpc.net

코드 구현

# ord()와 chr()을 통해 쉽게 해결가능
# print(ord('a')) 97
# print(ord('z')) 122
# print(ord('A')) 65
# print(ord('Z')) 90
# print(ord('m')) 109
# print(ord('M')) 77

ans = '' # 바뀐 문자열을 담을 변수
for i in input():
	# 만약 대문자라면
	if i.isupper():
		if (65 <= ord(i) <= 77):
			ans += chr(ord(i)+13) # A ~ M
		else:
			ans += chr(ord(i)-13) # N ~ Z
	# 만약 소문자라면
	elif i.islower():
		if (97 <= ord(i) <= 109):
			ans += chr(ord(i)+13) # a ~ m
		else:
			ans += chr(ord(i)-13) # m ~ z
	else:
		ans += i
print(ans)

처음에는 좀 무식한 방법을 고민했었다. 리스트에 a~z, A~Z 이런식으로 담아놓고 arr1[i] = arr2[i] 이런식으로 할당해서 풀었는데 도무지 비효율적인거 같아서 구글링을 해보았더니 ord()와 chr()를 통해 쉽게 구할 수 있었다...

  1. ord(), chr() 함수 활용하기
  2. isupper(). islower() 활용.
  3. "알파벳이 아닌 글자는 원래 글자 그대로 남아 있어야 한다" 조건 까먹지 않기
728x90