Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 면접복기
- 그래프탐색
- 브루트포스
- 몬티홀
- 배열 돌리기1
- 구현
- 회고
- BFS
- Python
- 빌더패턴
- g1gc
- 그래프 탐색
- Markdown
- github
- GC
- 이진탐색
- 프로세스
- 백준
- 분할정복
- DP
- 문제풀이
- Stack
- GarbageCollector
- 적정 스레드
- 마크다운
- 그리디
- Greedy
- springboot
- deque
- 정수론
Archives
- Today
- Total
FeelingXD
[백준-17609] 회문 본문
❓ Problem
🤔 How
- 중요한 포인트는 다음과 같다.
- 펠린드롬이라면 2 , 유사 펠린드롬이면 1, 둘다 아니라면 0을 반환한다.
- 유사펠린드롬은 문자 하나를 제거한뒤에 펠린드롬이 되는경우이다.
- 투포인터를 이용해 펠린드롬을 탐색하는 방법으로 접근했다. 그후 맞지않는 같은 단어가 아닌걸 발견하게 된다면 해당문자를 지우고 펠린드롬인지 확인하는 방법이다.
- 이때 좌측문자, 우측문자 두개가 있으므로 둘중 하나를 제거하여 펠린드롬 여부를 확인해야하는데 이때는 각단어 자리를 없에서 만든 새로운 문자가 펠린드롬인지 확인해준다. (slicing 을 이용하여 간단하게 새로운 문자열을 만드는 방법을 사용했다.)
❗ Solve
# 회문
import sys
input = sys.stdin.readline
def check(l, r, word):
while l < r:
if word[l] == word[r]:
l += 1
r -= 1
else:
# 우측 문자 를 제거하는경우
if (tmp := word[:r] + word[r + 1 :]) and tmp == tmp[::-1]:
return 1
pass
# 좌측 문자를 제거하는경우
if (tmp := word[:l] + word[l + 1 :]) and tmp == tmp[::-1]:
return 1
return 2
return 0
def solution():
for _ in range(case := int(input())):
word = input().strip()
l, r = 0, len(word) - 1
print(check(l, r, word))
pass
if __name__ == "__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[백준-1074] Z ✨ (0) | 2024.02.28 |
---|---|
[백준 -1992] 쿼드트리 (0) | 2024.02.26 |
[백준-20006] 랭킹전 대기열 (0) | 2024.02.14 |
[백준-16946] 벽 부수고 이동하기 4 🧱🔨 (0) | 2024.01.30 |
[백준-1331] 나이트 투어 (0) | 2024.01.28 |