[BOJ] Q17609 회문
[BOJ] Q17609 회문
Question
Language: Python
Difficulty: Silver 1
회문 문제를 풀이할때 start, end 두 개의 포인터를 활용한 two-pointer을 활용하는 것이 좋다.
회문 알고리즘
def ifPelindrom(string):
start=0
end=len(string)-1
while start<end:
if string[start]!=string[end]:
return False
start+=1
end-=1
return True
python 방식의 회문 알고리즘
def ifPelindrom(string):
return string == string[::-1]
문제의 경우 문자 1개를 제거해서 유사 회문인지를 판별하는 게 관건이므로, 회문 탐색을 진행하다가 문자가 서로 안 맞는 경우가 발생하면 왼쪽 경우에서 지우는 경우, 오른쪽 경우에서 지우는 경우를 모두 조사해서 유사 회문을 판별한다.
def ifPseudoPelindrom(string, start,end):
while start <= end:
if string[start]==string[end]:
start+=1
end-=1
else:
return False
return True
check_left=ifPseudoPelindrom(string,start+1,end)
check_right=ifPseudoPelindrom(string,start,end-1)
Solution
def ifPseudoPelindrom(string, start,end):
while start <= end:
if string[start]==string[end]:
start+=1
end-=1
else:
return False
return True
def ifPelindrom(string):
start=0
end=len(string)-1
while start<end:
if string[start]==string[end]:
start+=1
end-=1
continue
else:
check_left=ifPseudoPelindrom(string,start+1,end)
check_right=ifPseudoPelindrom(string,start,end-1)
if check_left or check_right:
return 1
else:
return 2
return 0
def solution():
for string in strings:
print(ifPelindrom(string))
if __name__ == "__main__":
num=int(input())
strings=[list(input().strip()) for _ in range(num)]
solution()
댓글남기기