2021. 1. 22. 14:09ㆍProgramming/SW Expert Academy
SW Expert Academy 4579번 "세상의 모든 팰린드롬 2" 문제입니다.
TC = int(input())
for tc in range(1, TC+1):
S = input()
pell = True
if len(S) == 1:
pell = True
else:
for i in range(0, len(S)//2):
if S[i] != S[len(S)-1-i]:
if S[i] != '*' and S[len(S)-1-i] != '*':
pell = False
break
if pell:
print("#%d Exist"%tc)
else:
print("#%d Not exist"%tc)
전에 포스트했던 "세상의 모든 팰린드롬" 문제와 유사한 문제다.
ggemkko-8642.tistory.com/entry/SW-Expert-Academy-4522
SW Expert Academy // 4522
SW Expert Academy 4522번 "세상의 모든 팰린드롬" 문제입니다. TC = int(input()) for tc in range(1, TC+1): S = input() pell = True if len(S) == 1: pell = True else: for i in range(0, len(S)//2): if S[i..
ggemkko-8642.tistory.com
이번엔 와일드카드가 "*"문자인데 이것은 길이에 구애받지 않는다.
즉 "*"자리에 "abc"같은 두 자리 이상의 문자열이 올 수도 있고 안 들어갈 수도 있다.
생각할수만 있다면 전에 포스트했던 "세상의 모든 팰린드롬" 문제보다 쉬운 문제라고 할 수 있다.
마찬가지로 팰린드롬 검사를 하는 것처럼 양 사이드 문자부터 안쪽으로 문자 비교를 한다.
만약 "*"가 아닌 두 문자가 다를 경우 팰린드롬 bool 변수를 False로 바꿔주고 반복문을 빠져나온다.
만약 둘 중 하나라도 "*"가 있으면 바로 팰린드롬 bool 변수를 True로 유지한 채 바로 반복문을 빠져나온다.
이유는 아래와 같다.
만약 abcd*a라는 문자열이 있으면 *자리엔 저 문자열이 팰린드롬이 되도록 하게끔 넣어줄 수 있기 때문이다.
위의 예는 아마 dcb일 것이다. 즉 "*"가 최초로 나타나기 전까지 두 문자가 일치하는지를 검사를 하고 "*"가 나타난 순간부터는 안쪽으로 어떤 문자들이 와도 팰린드롬으로 만들 수 있다.
그렇기에 생각만 할 수 있다면 전의 포스트한 문제보다 쉽다고도 볼 수 있는 문제다.
'Programming > SW Expert Academy' 카테고리의 다른 글
SW Expert Academy // 4406 (0) | 2021.01.23 |
---|---|
SW Expert Academy // 4466 (0) | 2021.01.22 |
SW Expert Academy // 4522 (0) | 2021.01.22 |
SW Expert Academy // 4676 (0) | 2021.01.21 |
SW Expert Academy // 4698 (0) | 2021.01.21 |