문제
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 |