알고리즘/백준(BOJ)

[백준/알고리즘] #17609: 회문 [파이썬(python)/문자열]

https://www.acmicpc.net/problem/17609

 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net

#17609_회문
import sys
T=int(input())

def similar(word, start, end):
    while start < end:
        if word[start]==word[end]:
            start+=1
            end-=1
        else:
            return 2
    return 1

def palindrome(word,start,end):
    while start<end:
        if word[start]==word[end]:
            start+=1
            end-=1
        else:
            sim1 = similar(word,start+1,end)
            sim2 = similar(word,start,end-1)
            if sim1==1 or sim2==1:
                return 1
            else:
                return 2
    return 0
    
for _ in range(T):
    word = list(input())
    res = palindrome(word, 0, len(word)-1)
    print(res)

문자열에 두 포인터를 두어 앞이랑 뒤에서 쭉 탐색하면 된다.