문제
- 난이도: 골드5
- 알고리즘 분류: 문자열, 두 포인터
- 요약: 주어진 문자열이 회문인지 유사 회문인지 일반 문자열인지 출력하기
풀이
회문 판단
left, right 변수를 사용해서 투 포인터로 풀이
유사회문 판단
중간에 일치하지 않는 문자가 나왔을 경우
1) 해당 위치에서 왼쪽 값 제거 후, 나머지 문자가 회문인지
2) 해당 위치에서 오른쪽 값 제거 후, 나머지 문자가 회문인지 확인
1), 2)에서 회문이 아니면 (다른 문자 개수 >= 2) 일반 문자열로 처리
코드
import sys
input = sys.stdin.readline
T = int(input())
def is_palindrome(word):
left = 0
right = len(word) - 1
while left < right:
if word[left] != word[right]:
rm_left = word[left+1:right+1]
if rm_left == rm_left[::-1]:
return 1
rm_right = word[left:right]
if rm_right == rm_right[::-1]:
return 1
return 2
left += 1
right -= 1
return 0
for _ in range(T):
word = input().rstrip()
diff = is_palindrome(word)
print(diff)
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 17406 배열 돌리기 4 python 풀이 (0) | 2024.06.28 |
---|---|
[백준] 1253 좋다 python 풀이 (0) | 2024.06.28 |
[백준] 15685 드래곤 커브 python 풀이 (0) | 2024.06.28 |
[백준] 2636 치즈 python 풀이 (0) | 2024.06.28 |
[백준] 13459 구슬 탈출 python 풀이 (0) | 2024.06.28 |