SWEA

[D3] SWEA 20019. 회문의 회문

코테봇 2024. 4. 27. 03:17

1.접근 방식

3가지 조건을 만족해야한다.

 

(1) S는 회문이다.

->이건 쉽다.

우리가 알고 있는대로 구현해주면 된다.

 

(2) S의 처음 (N-1)/2글자가 회문이다.

->이것도 쉽다.

문자열을 슬라이싱 해서 처음부터 절반 전의

인덱스의 문자열을

회문인지 판단하면 된다.

 

(3)S의 마지막 (N-1)/2글자가 회문이다.

->이것도 쉽다.

문자열을 슬라이싱해서 절반+1 인덱스부터

마지막 인덱스까지의  문자열을

회문인지 판단하면 된다.

 

ex) abcba

(1)회문이다.

(2) ab=회문이 아니다.

(3) ba=회문이 아니다.

 

ex) abacaba

(1)회문이다.

(2)aba=회문이다.

(3)aba=회문이다.

 

2.디테일한 구현

check(s)->문자열 자체를 회문인 지 판단해주는 함수를 구현해준다.

거기에 3가지 문자열을 보내서 회문인지 아닌지 판단하면 된다.

 

(1)문자열 S

(2)S의 처음 (N-1)/2 글자

=>S[0:len(s)//2]까지 슬라이싱 

인덱스 0 부터 중간 글자 -1 인덱스까지

(3)S의 마지막 (N-1)/2 글자

->S[(len(s)//2)+1:len(s)]까지 슬라이싱

인덱스 중간 글자+1부터 마지막 인덱스까지

 

 

 

 

3. 코드 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def check(s):
    for i in range(0,len(s)//2):
        if s[i]!=s[len(s)-1-i]:
            return 0
    return 1
 
 
if __name__=='__main__':
    #sys.stdin=open('input2.txt','r')   
    
    
    t=int(input()) ## 총 테스트 케이스 개수
    
    for tc in range(t):
        s=input()
    
        front_s=s[0:len(s)//2]
        back_s=s[(len(s)//2)+1:len(s)]
 
        res=0
        res+=check(s)
        res+=check(front_s)
        res+=check(back_s)
 
        if res==3:
            print(f'#{tc+1} YES')
 
        else:
            print(f'#{tc+1} NO')
cs