문제 링크 : https://www.acmicpc.net/problem/17609
투 포인터를 이용해서 문자열이 회문인지, 유사회문인지, 둘다 아닌지 판별하는 문제이다.
left = 0, right = len(s)로 시작해서 left와 right를 각각 오른쪽, 왼쪽으로 이동시킨다.
left < right인 동안 계속하여 s[left] == s[right]라면 회문이기 때문에 0을 출력한다.
s[left] != s[right]가 된다면,
s[left + 1 : right + 1](s의 left + 1번째 부터, right 번째를 포함하는 substring)가 회문, 또는 s[left : right](s의 left번째 부터, right - 1번째를 포함하는 substring)가 회문이라면 유사회문이므로 1을 출력하고, 둘 다 그렇지 않다면 2를 출력한다.
def is_palindrome(s):
left, right = 0, len(s) - 1
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
def check_palindrome(s):
left, right = 0, len(s) - 1
while left < right:
if s[left] != s[right]:
if is_palindrome(s[(left + 1):(right + 1)]) or is_palindrome(s[left:right]):
return 1
else:
return 2
left += 1
right -= 1
return 0
T = int(input())
for _ in range(T):
s = input().strip()
print(check_palindrome(s))
728x90
'Problem Solving' 카테고리의 다른 글
[Problem Solving] BOJ 17143 : 낚시왕 (0) | 2025.03.03 |
---|---|
[Problem Solving] BOJ 2022 : 사다리 (0) | 2025.03.02 |
[Problem Solving] BOJ 1041 : 주사위 (1) | 2025.02.27 |
[Problem Solving] BOJ 5427 : 불 (0) | 2025.02.26 |
[Problem Solving] BOJ 16194 : 카드 구매하기 2 (0) | 2025.02.25 |