풀이
- 뭔가 뭔가하게 깔끔하지 못한 풀이가 되어버린...
- 작성 초기엔 간단하게 작성 가능할거라고 생각했는데 숨겨진 TC를 찾다보니 더러워져버렸다.
- 우선 그냥 빈 문자열에 값을 추가하면서 진행하게 되면
- 객체를 계속 생성하는 비효율적인 문제로 result를 문자 크기에 맞게 생성 후 작업
- 이후 반목문을 통한 i와 back의 값이 서로 거울상 관계인지, 자신과 거울상인지 확인 후
- dic에 key값으로 값을 넣어 저장
- 이후 문자열 길이가 홀수의 경우 따로 한 번 더 조건을 추가하여 해결
import sys
input = sys.stdin.readline
mirror = {"b","d","p","q","i","o","v","w","x"}
dic = {"b":"d",
"d":"b",
"p":"q",
"q":"p"
}
while True:
text = input().rstrip('\n')
if text == "#": break
t_ln = len(text)
result = [""]*t_ln
state = True
for i in range(t_ln//2):
back = t_ln-1-i
if (text[i],text[back]) == ("b","d") or (text[i],text[back]) == ("p","q") : result[i],result[back] = text[i],text[back]
elif text[i] in mirror and text[back] in mirror:
if text[i] in {"b","d","p","q"} and text[back] in {"b","d","p","q"}: result[i],result[back] = dic[text[back]],dic[text[i]]
elif text[i] in {"b","d","p","q"}: result[i],result[back] = text[back],dic[text[i]]
elif text[back] in {"b","d","p","q"}:result[i],result[back] = dic[text[back]],text[i]
else: result[i],result[back] = text[back],text[i]
else:
state = False
break
if state:
if t_ln%2:
if text[t_ln//2] not in mirror: print("INVALID")
else:
if text[t_ln//2] in {"b","d","p","q"}: result[t_ln//2] = dic[text[t_ln//2]]
else: result[t_ln//2] = text[t_ln//2]
print("".join(result))
else:
print("".join(result))
else: print("INVALID")
'알고리즘' 카테고리의 다른 글
[백준, 파이썬, 3023번] 마술사 이민혁 (1) | 2024.02.15 |
---|---|
[백준, 파이썬, 1835번] 카드 (0) | 2024.02.14 |
[백준, 자바, 1384번] 메시지 (0) | 2024.02.13 |
[백준, 파이썬, 1384번] 메시지 (1) | 2024.02.13 |
[백준, 자바, 1380번] 귀걸이 (0) | 2024.02.13 |