알고리즘/백준

[D3] 회문의 회문 - 20019 (python)

KimMinGyun 2024. 6. 25. 10:49

문제 링크

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

어떤 문자열 S가 회문(palindrome)이라는 것은, 이 문자열을 앞에서부터 뒤로 읽은 것과 뒤에서부터 앞으로 읽은 것이 동일하다는 것을 의미한다. 예를 들어 “samsung”, “hello”는 회문이 아니지만, “abcba”, “asdffdsa”는 회문이다.
길이가 홀수 N인 어떤 문자열 S가 회문의 회문이라는 것은, 이 문자열이 아래 조건을 만족한다는 것을 의미한다.
- S는 회문이다.
- S의 처음 (N-1)/2글자가 회문이다.
- S의 마지막 (N-1)/2글자가 회문이다.
- 주어진 문자열이 회문의 회문인지 판별하는 프로그램을 작성하라.

입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스는 한 개의 줄로 이루어진다. 각 줄에는 길이가 3 이상 99 이하인, 알파벳 소문자(a-z)로만 이루어진 문자열 S가 주어진다.

출력
각 테스트 케이스마다, S가 회문의 회문이면 YES를, 그렇지 않다면 NO를 출력한다.

 

 

코드

 

for t in range(1, int(input())+1):
    print(f'#{t}', end=' ')

    word = input()

    ans = 'NO'
    if word == word[::-1]:
        front_word = word[:(len(word)-1)//2]  # 처음 (N-1)/2글자
        back_word = word[(len(word) - (len(word)-1)//2):]  # 마지막 (N-1)/2글자
        if front_word == front_word[::-1] and back_word == back_word[::-1]:
            ans = 'YES'

    print(ans)