Koala - 10기/코딩테스트 준비 스터디

[백준 / Python] 17609 회문

beans3142 2023. 3. 26. 18:29
https://www.acmicpc.net/problem/17609
 

17609번: 회문

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

www.acmicpc.net



문제 분석

난이도

골드5

분류

이분탐색

들어가기 전에

회문이라는 이름이 들어가는 문제들은 정말 태그가 다양하다.

문제

문제 풀이

 

풀이

좌우 투 포인터인데 같은 문자가 아니라면 왼쪽 한칸 이동 / 오른쪽 한칸 이동 시켜준 뒤 회문판별을 시켜주면 된다.

소스코드

from sys import stdin
input=stdin.readline

for _ in range(int(input())):
    s=input().rstrip()
    l=0
    r=len(s)-1
    p=0
    able=True
    while l<r:
        if s[l]==s[r]:
            l+=1
            r-=1
        elif s[l+1]==s[r]:
            l+=1
            p+=1
        else:
            able=False
            break
    if able:
        if p==0:
            print(0)
            continue
        elif p==1:
            print(1)
            continue
    able=True
    p=0
    l=0
    r=len(s)-1
    while l<r:
        if s[l]==s[r]:
            l+=1
            r-=1
        elif s[l]==s[r-1]:
            r-=1
            p+=1
        else:
            able=False
            break
    if able:
        if p==0:
            print(0)
        elif p==1:
            print(1)
        else:
            print(2)
    else:
        print(2)

후기