BOJ 17609 파이썬

노영진·2023년 11월 27일
post-thumbnail

회문

🤔 접근

  1. 두 개의 포인터로 하나는 앞에서부터, 하나는 뒤에서부터 탐색하며 두 포인터가 가리키는 값이 다를 때까지 탐색한다.
  2. 만약 다르다면, 왼쪽을 하나 삭제하였을 때 회문인지 확인한다. 참이라면 유사회문이다.
  3. 2가 False라면, 오른쪽을 하나 삭제하였을 때 회문인지 확인한다. 참이라면 유사회문이다.
  4. 3이 False라면 회문이 아니다.

💻 코드

import sys

def palindrome(s, res):
    sp, ep = 0, len(s)-1
    while sp < ep:
        if s[sp] == s[ep]:
            sp += 1
            ep -= 1
        elif not res:
            if palindrome(s[sp+1:ep+1], 1) == 0:
                return 1
            elif palindrome(s[sp:ep], 1) == 0:
                return 1
            else:
                return 2

        else:
            return 2
        
    return 0


n = int(sys.stdin.readline())
res = []
for _ in range(n):
    s = list(sys.stdin.readline().rstrip())
    res.append(palindrome(s, 0))

for i in res:
    print(i)

0개의 댓글