[ BOJ / Python ] 17609번 회문

황승환·2022년 7월 26일
0

Python

목록 보기
395/498


이번 문제는 슬라이싱과 투포인터를 통해 해결하였다. 문자열을 입력받으면, 슬라이싱을 통해 거꾸로 돌린 값과 비교한다. 같다면 바로 0을 출력하고, 같지 않다면, r, l 포인터를 각각 0과 문자열의길이-1로 선언한 후, 문자열을 순회한다. 두 포인터가 가리키는 문자가 같다면 r을 1 증가, l을 1 감소시키고, 다르다면, r이 가리지는 문자를 뺀 문자열와 이 문자열을 거꾸로 돌린값을 비교하고, l이 가리키는 문자를 뺀 문자열과 이 문자열을 거꾸로 돌린값을 비교하여 이 중 하나라도 True라는 결과가 반환된다면 1을 출력하고, 그렇지 않다면 2를 출력하도록 하였다.

Code

t = int(input())
for _ in range(t):
    s = list(str(input()))
    if s == s[::-1]:
        print(0)
    else:
        r, l = 0, len(s)-1
        while r <= l:
            if s[r] == s[l]:
                r += 1
                l -= 1
            else:
                if s[:r]+s[r+1:] == (s[:r]+s[r+1:])[::-1] or s[:l]+s[l+1:] == (s[:l]+s[l+1:])[::-1]:
                    print(1)
                    break
                else:
                    print(2)
                    break

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글