728x90
반응형
코딩테스트 해설
문제 유형 : 문자열, 투포인터
작성 코드
import sys
N = int(sys.stdin.readline())
def is_check(s, left, right):
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
for _ in range(N):
s = sys.stdin.readline().strip()
left, right = 0, len(s) - 1
result = 0
while left < right:
if s[left] != s[right]:
if (result := 1 if is_check(s, left + 1, right) or is_check(s, left, right - 1) else 2) != 0:
break
left += 1
right -= 1
print(result)
접근 방식
- s[left] != s[right]가 차이가 난다면 무조건 최소 1개의 문제는 존재하는 겁니다 따라서, 체크를 하더라도 1, 2 밖에 나올 수 없습니다.
- 만약 모든 조건이 잘 맞다면 result를 초기값으로 두고 그대로 print만 하게 된다면 result 하게 됩니다.
- is_check를 통해 left + 1 값과 right -1 된 s(문자열)을 체크하도록 합니다
- left 또는 right의 값이 변하였어도 이후에도 같지 않은 값이 있다면, False를 반환 합니다.
- 추가로 둘다 False 일 경우, 2개 이상의 문제가 있다는 것이기에 := 대입표현식을 이용해 처리했습니다.
개선 사항
- 간단하게 생각하면 간단하지만 어려우면 어려운 문제 같습니다.
- 결국 좌우 반전으로 체크 하는 방법도 있는걸 알고 슬펐지만, 시간 복잡도와 공간 복잡도, 메모리 사용량에서 우위를 가져 다행입니다.

728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[ Python ] 15656번 : N과 M (7) (0) | 2024.08.20 |
---|---|
[ Python ] 15654번 : N과 M (5) (0) | 2024.08.14 |
[ Python ] 2230번: 수 고르기 (0) | 2024.08.08 |
[ Python ] 1806번: 부분합 (0) | 2024.08.07 |
[ Python ] 11728번: 배열 합치기 (0) | 2024.08.07 |