https://www.acmicpc.net/problem/17609
t=int(input())
arr=[]
for _ in range(t):
s=input()
stack=0
left=0
right=len(s)-1
answer=0
while left<=right:
if s[left]==s[right]:
left+=1
right-=1
else:
if s[left+1:right+1]==s[left+1:right+1][::-1] or s[left:right]==s[left:right][::-1]:
answer=1
else:
answer=2
break
print(answer)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
String s = br.readLine();
int left = 0;
int right = s.length() - 1;
int answer = 0;
while (left <= right) {
if (s.charAt(left) == s.charAt(right)) {
left++;
right--;
} else {
if (isPalindrome(s, left + 1, right) || isPalindrome(s, left, right - 1)) {
answer = 1;
} else {
answer = 2;
}
break;
}
}
sb.append(answer).append("\n");
}
System.out.println(sb.toString());
}
public static boolean isPalindrome(String s, int left, int right) {
while (left < right) {
if (s.charAt(left) != s.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
투 포인터를 사용한 문자열 문제이다. 문자열에서 양 끝에서 확인하면서 다른 지점이 있을 경우, 두 가지 경우를 확인하면 된다. 왼쪽에서 하나 건너뛰는 경우와 오른쪽에서 하나 건너뛰는 경우를 각각 해서 양쪽에서 확인하면 된다. 모든 문자가 처음부터 양쪽에서 부터 같으면 되거나 아니면 확인하면 된다.
이렇게 Python과 Java로 백준의 "회문" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊