본문 바로가기
알고리즘/문자열

[백준][Python] 17609번 회문

by 임짠짠 2022. 6. 30.
반응형
 

17609번: 회문

각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다.

www.acmicpc.net

 

 

코드

import sys

def check(word,l,r):
	while l < r:
		if word[l] == word[r]:
			l += 1
			r -= 1
		else:
			l_remove = check2(word,l+1,r)
			r_remove = check2(word,l,r-1)
			if (l_remove or r_remove):
				return 1
			else:
				return 2
	return 0

def check2(word,l,r):
	while l < r:
		if word[l] == word[r]:
			l += 1
			r -= 1
		else:
			return False
	return True

t = int(input())
for _ in range(t):
	word = sys.stdin.readline().rstrip()

	l = 0
	r = len(word)-1
	
	print(check(word,l,r))

 

설명

check 함수에서는 문자열이 회문인지 투 포인터를 이용해 비교를 해서 확인을 한다. 모두 같으면 0을 반환해준다.

만약 같지 않은 부분이 있으면 check2 함수에서 왼쪽 문자를 하나 삭제한 후 검사를 하거나 오른쪽 문자 하나를 삭제한 후 검사를 한다. 이때 유사 회문이 되면 True를 반환하고 check 함수에서 1을 반환해준다.

반응형

댓글