아이디어 : 구현, 문자열, 두 포인터, 함수
문제 해결 과정
1. 양 끝에서 대칭으로 문자열을 비교한다.
2. 문자가 다르면, 한번 더 대칭으로 문자열을 비교한다. (문자열이 모두 같으면 회문 "0")
2-1. 오른쪽 인덱스 한칸 건너띄고 비교
2-2. 왼쪽 인덱스 한칸 건너띄고 비교
3. 이전 단계 2-1, 2-2 를 수행했을 때, 문자열이 모두 같으면 유사회문 "1", 다른 경우가 있으면 "2"
나의 답안
import sys
input = sys.stdin.readline
T = int(input().strip())
def strCheck(str, l, r):
while l <= r:
if str[l] != str[r]:
return False
l += 1
r -= 1
return True
while T:
T -= 1
str = input().strip()
L_index = 0
R_index = len(str) - 1
fail_count = 0
while L_index <= R_index:
# one fail
if str[L_index] != str[R_index]:
R_check = strCheck(str, L_index, R_index - 1)
L_check = strCheck(str, L_index + 1, R_index)
# two fail check
if L_check or R_check:
fail_count = 1
else:
fail_count = 2
break
L_index += 1
R_index -= 1
print(fail_count)
추가
처음에는 메인 로직에 유사회문 비교 알고리즘을 작성하였다.
이후, def strCheck 함수를 만들었더니, 훨씬 간결하고 직관적인 코드를 작성할 수 있었다.
앞으로 중복되는 서브 로직은 def 함수를 만들어서 구현하자!
https://www.acmicpc.net/problem/17609
17609번: 회문
각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.
www.acmicpc.net
'코딩테스트' 카테고리의 다른 글
[백준] 14497번 : 주난의 난 - 파이썬 (0) | 2023.03.23 |
---|---|
[백준] 2178번 : 미로 탐색 - 파이썬 (2) | 2023.03.19 |
[백준] 10799번 : 쇠막대기 - 파이썬 (0) | 2023.03.16 |
[백준] 9012번 : 막대 - 파이썬 (0) | 2023.03.08 |
[백준] 12847번 : 꿀 아르바이트 - 파이썬 (0) | 2023.03.07 |