본문 바로가기

코딩테스트/SWEA

[Python, 파이썬] SWEA 4579. 세상의 모든 팰린드롬 2

*라는 와일드카드가 있는 특정한 패턴이 주어질 때, 이에 매치되는 팰린드롬을 찾는 문제.

 

 

T = int(input()) # 테스트 케이스의 수 T

for test_case in range(1, T+1):

    word = list(input()) # 패턴 입력받기

    N= len(word) # 패턴의 길이
    result = "Exist"
    i = 0
    
    while(word[i] != '*' and word[N-(i+1)] != '*' and i < N-1): # * 와일드 카드 나오기 전까지 반복

        if(word[i] != word[N-(i+1)]): # 펠린드롬이 아닐 시
            result = "Not exist"

        i +=1

    print("#%d %s" %(test_case, result))
 

 

[문제풀이]


 

SWEA 4522 문제의 확장판으로, *를 사용한 패턴과 매치되는 단어가 있는지 구하는 문제.

*는 길이가 0 이상인 임의의 알파벳들로 대체될 수 있는 와일드 카드다.

 

?는 대칭되는 문자로 대치해서 펠린드롬인지 확인하면 됬지만, *는 0개 이상의 알파벳으로 대치된다.

absdfs*a
 

 

그래서 이런 문자라도 *가 알아서 대치해주기 때문에 펠린드롬이 된다.

 

그래서 * 나오기 전까지 일치하면 펠린드롬!

while문을 돌려서 체크하면 된다.