문제
https://www.acmicpc.net/problem/17609
17609번: 회문
각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
www.acmicpc.net
풀이 과정
투 포인터 방식으로 풀었다. 두 개의 포인터를 맨 왼쪽과 맨 오른쪽에 놓고 한 칸씩 이동하면서 회문인지 유사회문인지 일반 문자열인지 판별하였다.
코드
# 회문인지 체크하는 함수
def check_palindrome(l, r):
while l < r:
if string[l] != string[r]:
return False
l += 1
r -= 1
return True
t = int(input())
for _ in range(t):
string = input()
answer = 0
l = 0
r = len(string) - 1
while l < r:
if string[l] != string[r]: # 그 자체로 회문인지
# 이미 한 글자 제거한 경우
if answer == 1:
answer = 2
break
# 왼쪽 문자열 삭제 후 회문이 된다면
if check_palindrome(l+1, r):
l += 1
answer = 1
break
# 오른쪽 문자열 삭제 후 회문이 된다면
if check_palindrome(l, r-1):
r -= 1
answer = 1
# 그 자체로 회문도 안되는데 유사회문도 되지 않는 경우 => 일반 문자열
if answer != 1:
answer = 2
break
l += 1
r -= 1
print(answer)
'Algorithm > Baekjoon' 카테고리의 다른 글
[Python] 15991. MooTube (Silver) (0) | 2022.10.05 |
---|---|
[Python] 13335. 트럭 (2) | 2022.10.05 |
[Python] 24553. 팰린드롬 게임 (0) | 2022.09.19 |
[Python] 3048. 개미 (0) | 2022.09.18 |
[Python] 20057. 마법사 상어와 토네이도 (0) | 2022.09.15 |