- 회문인지 아닌지를 판단하는 방법은 간단했지만 유사회문을 어떻게 판단할 것인가가 매우 중요한 문제였다.
- 투 포인터를 이용해서 만약 두 문자가 같으면
left+=1
,right-=1
을 수행하여 인덱스에 변화를 주었고left < right
를 만족하는 시점까지 반복문을 돌려주었다.- 만약 두 문자가 같지 않으면 해당 문자를 제외한 나머지 문자열을 각각의 변수에 저장한 다음 만약 하나라도 회문의 조건을 만족한다면 유사회문이 되므로 1을 반환하는 방식을 사용했다.
import sys
input = sys.stdin.readline
def function(String, left, right):
while True:
if left > right:
break
if String[left] == String[right]:
left += 1
right -= 1
else:
temp1 = String[left:right]
temp2 = String[left+1:right+1]
if (temp1 == temp1[::-1]) or (temp2 == temp2[::-1]):
return 1
else:
return 2
return 0
T = int(input())
for _ in range(T):
String = input().strip()
left = 0
right = len(String) - 1
print(function(String, left, right))
📌input = sys.stdin.readline
을 사용하게 된다면 개행문자가 포함된다. 따라서 공백을 제거해주는 메소드인 strip
을 사용해야 오류가 발생하지 않는다.