공부 기록장
[백준 - Python] 17609. 회문 본문
https://www.acmicpc.net/problem/17609
코드
n = int(input())
for _ in range(n):
st = input()
left, right = 0, len(st) - 1
answer = 0
while left <= right:
if st[left] == st[right]:
left += 1
right -= 1
else:
# 왼쪽 문자를 제거한 경우 회문인지 확인
if st[left + 1:right + 1] == st[left + 1:right + 1][::-1]:
answer = 1
# 오른쪽 문자를 제거한 경우 회문인지 확인
elif st[left:right] == st[left:right][::-1]:
answer = 1
else:
answer = 2
break
print(answer)
'''
앞 뒤 방향으로 볼 때 같은 순서의 문자로 구성된 문자열 : 회문
한 문자를 삭제해서 회문이 될 수 있는 문자열 : 유사회문
회문 0, 유사회문 1, 그 외 2
'''
접근 방식
1. 양 끝에서 포인터로 이동하면서 같으면 계속 이동
2. 다르면 양쪽을 각각 이동시켜본 후 회문이지 확인
3. 한 쪽 문자만 제거하고 회문이면 유사회문
4. 한 쪽 문자를 제거하고도 회문이 아니면 회문 아님
5. else 문에 안걸리면 일반 회문
배운 점
1. 문자열에서는 슬라이싱이 유용하게 사용된다
2.
st[left:right][::-1]
위와 같이 슬라이싱으로 잘라낸 후, 다시 해당 잘라낸 문자열을 뒤집기도 가능하다
'코딩 테스트 > 백준 문제 풀이' 카테고리의 다른 글
[백준 - Python] 11279. 최대 힙 (0) | 2024.08.30 |
---|---|
[백준 - Python] 2075. N번째 큰 수 (0) | 2024.08.30 |
[백준 - Python] 2230. 수 고르기 (0) | 2024.08.08 |
[백준 - Python] 1806. 부분합 (0) | 2024.08.08 |
[백준 - Python] 11728. 배열 합치기 (0) | 2024.08.05 |