반응형
문제설명
https://www.acmicpc.net/problem/11655
사고과정
- 처음에 아스키 코드로 13번째 뒤 문자를 의미하는 줄 알았으나 입력 예시를 쳐보고 그게 아니고 알파벳 대문자 ,소문자 상에서 각각 13번째 뒤를 의미하는 것을 깨달았다. 그래서 A~Z, a~z 별로 아스키 문자를 활용해 각 대문자, 소문자 리스트를 만들어주었다.
- 문자열 하나씩 돌면서 알파벳 대문자 또는 소문자 일때, 각각의 대문자, 소문자 리스트를 참조하는데, 이 때 13번째 증가한 인덱스의 값으로 대체해주면 된다. 단, 13번째 인덱스를 더했을 때 대문자, 소문자 리스트 길이인 26을 넘어가게 되면 다시 앞으로 초기화 해주어야 한다.
- 이를 구현하기 위해서 % 연산자를 사용. 예를 들어 20번째 인덱스에서 13 인덱스를 더하면 33인덱스이다. 이 때 33을 26으로 나눈 나머지(33 % 26)를 하게 되면 7이 나오게 되는데, 이 7이 바로 다시 0번 인덱스로 돌아간 후 7번째 인덱스를 의미한다!
- 리스트 인덱스를 순회하는 문제를 그동안 풀어보고 매번 못풀었었는데 다행히 이번에는 잘 구현했다!
풀이
upper = [chr(ord('A') + i) for i in range(0, 26)]
lower = [chr(ord('a') + i) for i in range(0, 26)]
string = list(input())
for i in range(len(string)):
# 대문자일 경우
if string[i].isupper():
up_idx = upper.index(string[i]) + 13
if up_idx >= 26:
up_idx %= 26
string[i] = upper[up_idx]
else:
string[i] = upper[up_idx]
# 소문자일 경우
elif string[i].islower():
low_idx = lower.index(string[i]) + 13
if low_idx >= 26:
low_idx %= 26
string[i] = lower[low_idx]
else:
string[i] = lower[low_idx]
# 공백이나 숫자일 경우 그냥 무시
else:
continue
print(''.join(string))
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[BOJ] 11656번 - 접미사 배열 (0) | 2021.10.26 |
---|---|
[BOJ] 10824번 - 네 수 (0) | 2021.10.26 |
[BOJ] 10820번 - 문자열 분석 (0) | 2021.10.26 |
[BOJ] 10809번 - 알파벳 찾기 (0) | 2021.10.26 |
[BOJ] 10808번 - 알파벳 개수 (0) | 2021.10.26 |