[백준] 17609번 회문

거북이·2023년 7월 11일
0

백준[골드5]

목록 보기
59/82
post-thumbnail

💡문제접근

  • 회문인지 아닌지를 판단하는 방법은 간단했지만 유사회문을 어떻게 판단할 것인가가 매우 중요한 문제였다.
  • 투 포인터를 이용해서 만약 두 문자가 같으면 left+=1, right-=1 을 수행하여 인덱스에 변화를 주었고 left < right를 만족하는 시점까지 반복문을 돌려주었다.
  • 만약 두 문자가 같지 않으면 해당 문자를 제외한 나머지 문자열을 각각의 변수에 저장한 다음 만약 하나라도 회문의 조건을 만족한다면 유사회문이 되므로 1을 반환하는 방식을 사용했다.

💡코드(메모리 : 31256KB, 시간 : 152ms)

import sys
input = sys.stdin.readline

def function(String, left, right):
    while True:
        if left > right:
            break
        if String[left] == String[right]:
            left += 1
            right -= 1
        else:
            temp1 = String[left:right]
            temp2 = String[left+1:right+1]
            if (temp1 == temp1[::-1]) or (temp2 == temp2[::-1]):
                return 1
            else:
                return 2
    return 0


T = int(input())
for _ in range(T):
    String = input().strip()
    left = 0
    right = len(String) - 1
    print(function(String, left, right))

📌input = sys.stdin.readline을 사용하게 된다면 개행문자가 포함된다. 따라서 공백을 제거해주는 메소드인 strip을 사용해야 오류가 발생하지 않는다.

💡소요시간 : 43m

0개의 댓글