[SWEA] 4579. 세상의 모든 팰린드롬 2(python)
📌문제
💪아이디어
팰린드롬 확인
이중포인터(left,right)를 사용하여 앞에서 뒤의 문자를 확인한다. left와 right가 같을 때까지 while문이 돌면 팰린드롬이라 하였다.와일드카드 ‘*’ 처리
와일드카드는 0이상의 어떠한 알파벳이므로 두 가지로 처리할 수 있다.- 와일드카드가 0개이상
와일드카드가 left에 있을 경우 list [ left+1:right ], right에 있을 경우 list [ left:right+1 ]이 팰린드롬이 되는지 확인해야하므로 재귀함수를 사용하였다. - 와일드카드가 1개 이상
left와 right의 문자가 다를 때
left에 있을 경우 right 인덱스의 알파벳과 같다고 판단하고 right를 옮기고. right에 있을 경우 left 인덱스의 알파벳과 같다고 판단하고 left를 옮겼다.
left와 right의 문자가 같은 때
그 문자가 ‘*‘이면 left를 옮겨줬고(right를 옮겨도 상관없음) 그 문자가 알파벳이면 left,right를 모두 옮겨줬다
- 와일드카드가 0개이상
🥂코드
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
30
31
32
33
34
35
36
def palindrome_with_wildcard(string):
left,right=0,len(string)-1
while left<right:
if string[left]!=string[right]:
if string[left]=='*':
if not palindrome_with_wildcard(string[left+1:right+1]):
right-=1
else:
return True
elif string[right]=='*':
if not palindrome_with_wildcard(string[left:right]):
left+=1
else:
return True
else:
if string[left]=='*':
left+=1
elif string[right]=='*':
right-=1
else:
return False
else:
if string[left]!='*' and string[left]!='*':
left+=1
right-=1
else:
left+=1
else: return True
T=int(input())
for tc in range(1,T+1):
in_string=list(input())
answer='Exist'
if not palindrome_with_wildcard(in_string):
answer='Not exist'
print('#{} {}'.format(tc,answer))
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.