Algorithm/Greedy

[Greedy] 백준 17609번 “회문” Python 풀이

운호(Noah) 2023. 11. 26. 16:03

문제 링크

풀이

  • 왼쪽 포인터 값과 오른쪽 포인터 값이 동일할 경우, 양쪽 포인터를 그 다음 포인터로 이동
  • 왼쪽 포인터 값과 오른쪽 포인터 값이 동일하지 않을 경우
    • 왼쪽 포인터를 오른쪽으로 이동했을 때, 양쪽 포인터 내부 문자열이 회문이 되는지 확인
    • 오른쪽 포인터를 왼쪽으로 이동했을 때, 양쪽 포인터 내부 문자열이 회문이 되는지 확인
    • 나머지 경우(회문이나 유사회문도 아닌 일반 문자열인 경우)

코드

import sys

t = int(sys.stdin.readline())

for i in range(t):

    result = 0

    str = list(sys.stdin.readline().rstrip())

    left_idx = 0
    right_idx = len(str)-1

    while (left_idx < right_idx):

        # 왼쪽 포인터 값과 오른쪽 포인터 값이 동일할 경우
        if (str[left_idx] == str[right_idx]):
            left_idx += 1
            right_idx -= 1

        # 왼쪽 포인터 값과 오른쪽 포인터 값이 동일하지 않을 경우
        else:
            # 왼쪽 포인터를 오른쪽으로 이동했을 때, 양쪽 포인터 내부 문자열이 회문이 되는지 확인
            if (str[left_idx+1:right_idx+1] == str[left_idx+1:right_idx+1][::-1]):
                result = 1
                break

            # 오른쪽 포인터를 왼쪽으로 이동했을 때, 양쪽 포인터 내부 문자열이 회문이 되는지 확인
            elif (str[left_idx:right_idx] == str[left_idx:right_idx][::-1]):
                result = 1
                break

            # 회문이나 유사회문도 아닌 일반 문자열인 경우
            else:
                result = 2
                break

    print(result)