문제 설명
•
개의 문자열에 대해, 각각의 문자열이 회문인지, 유사회문인지를 판단하는 문제
◦
유사회문이란 한 문자를 삭제하여 회문이 되는 문자열을 의미한다.
예제 입력/출력
•
입력1
7
abba
summuus
xabba
xabbay
comcom
comwwmoc
comwwtmoc
Plain Text
복사
•
출력1
0
1
1
2
2
0
1
Plain Text
복사
제약 조건
•
•
(각 문자열의 길이)
문제 풀이
•
접근1 길이가 인 문자열이 회문인지를 판단하는 방법
◦
브루트 포스적으로 확인하는 방법 -
•
접근2 길이가 인 문자열이 유사회문인지를 판단하는 방법
◦
모든 문자에 대해 지워본 후에, 각각에 대해 회문인지를 판단하는 방법 -
◦
브루트 포스적인 풀이에서 조금 더 효율적인 풀이를 생각 (= 그리디한 사고 과정)
▪
문자열 양 끝에서부터 포인터를 두고 확인하다가 문자가 다를 경우, 그 중 한 문자를 제거했을 때 나머지 문자열이 회문인지를 확인한다. -
풀이 코드
•
투 포인터 -
def is_palindrom(s):
for left in range(len(s)):
right = len(s) - left - 1
if s[left] != s[right]:
return False
return True
def is_pseudo_palindrome(s):
for left in range(len(s)):
right = len(s) - left - 1
if s[left] != s[right]:
s1 = s[:left] + s[left + 1:]
s2 = s[:right] + s[right + 1:]
if is_palindrom(s1) or is_palindrom(s2):
return True
else:
return False
def solve():
# input
S = input()
# solve
if is_palindrom(S):
print(0)
return
if is_pseudo_palindrome(S):
print(1)
return
print(2)
T = int(input())
for _ in range(T):
solve()
Python
복사