문제
코드
My answer
import sys
input=sys.stdin.readline
def main(s):
def check(substring):
return substring == substring[::-1]
for i in range(len(s) // 2):
if s[i] != s[len(s) - 1 - i]:
substring_left = s[:i] + s[i + 1:]
substring_right = s[:len(s) - 1 - i] + s[len(s) - i:]
if check(substring_left) or check(substring_right):return 1
else:return 2
return 0
T=int(input())
for i in range(T):
input_str= input().rstrip()
result = main(input_str)
print(result)
Another answer
from sys import stdin
input = stdin.readline
num = int(input())
for _ in range(num):
st = input().strip()
front, back = 0, len(st) - 1
check = 0
for _ in range(len(st)):
if front >= back:
break
if st[front] == st[back]:
front += 1
back -= 1
continue
# 뒷 문자 제거
if st[front] == st[back-1]:
temp = st[front:back]
if temp[:] == temp[::-1]:
check = 1
break
# 앞 문자 제거
if st[front+1] == st[back]:
temp = st[front+1:back+1]
if temp[:] == temp[::-1]:
check = 1
break
check = 2
break
print(check)
풀이
우선 나는 `check`라는 함수를 만들어서 회문인지를 간단하게 확인할 수 있는 함수를 먼저 만들었다. 회문은 말 그대로 거꾸로 뒤집었을 때 같은 문장을 의미하기 때문에 `[::-1]`을 이용해 뒤집어서 비교할 수 있었다.
이 문제는 유사회문인지를 확인하는 것이 까다로웠는데, 단순하게 접근하면 된다.
우선 하나씩 문장의 앞과 끝을 비교해가면서 만약 같다면 그냥 넘기고, 다르다면 앞에 글자를 제거하였을 때, 뒤에 글자를 제거하였을 때를 확인해보고 둘 중 하나를 제거하였을 때 제거가되면 유사회문이고, 그렇지 않다면 일반 문장인 것이다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #18404- 현명한 나이트 (2) | 2023.09.26 |
---|---|
[Python] 백준 #18511- 큰 수 구성하기 (0) | 2023.09.26 |
[Python] 백준 #18310- 안테나 (0) | 2023.09.26 |
[Python] 백준 #1668-트로피 진열 (0) | 2023.09.26 |
[Python] 백준 #1568- 새 (0) | 2023.09.26 |