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 |