Algorithm/Baekjoon

[백준] 17609 회문 python 풀이

jungeun919 2024. 6. 28. 15:09

문제

  • 난이도: 골드5
  • 알고리즘 분류: 문자열, 두 포인터
  • 요약: 주어진 문자열이 회문인지 유사 회문인지 일반 문자열인지 출력하기

 

풀이

회문 판단

left, right 변수를 사용해서 투 포인터로 풀이

 

유사회문 판단

중간에 일치하지 않는 문자가 나왔을 경우
1) 해당 위치에서 왼쪽 값 제거 후, 나머지 문자가 회문인지
2) 해당 위치에서 오른쪽 값 제거 후, 나머지 문자가 회문인지 확인
1), 2)에서 회문이 아니면 (다른 문자 개수 >= 2) 일반 문자열로 처리

 

코드

import sys

input = sys.stdin.readline

T = int(input())

def is_palindrome(word):
    left = 0
    right = len(word) - 1

    while left < right:
        if word[left] != word[right]:
            rm_left = word[left+1:right+1]
            if rm_left == rm_left[::-1]:
                return 1

            rm_right = word[left:right]
            if rm_right == rm_right[::-1]:
                return 1

            return 2

        left += 1
        right -= 1

    return 0

for _ in range(T):
    word = input().rstrip()
    diff = is_palindrome(word)
    print(diff)