728x90
https://www.acmicpc.net/problem/17609
check메소드에서 while문으로 left와 right 를 하나씩 비교하면서 회문임을 확인한다.
check2 메소드에서는 while문으로 left와 right 를 하나씩 비교하고,
같지 않다면 check(left+1,right) 와 check(left,right-1) 로 왼쪽 하나와 오른쪽 하나를 지웠을때 회문인지 확인한다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static char[] arr;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
for (int i = 0; i < num; i++) {
arr = br.readLine().toCharArray();
int left = 0;
int right = arr.length - 1;
if (check(left, right)) { //회문인지 확인하기
System.out.println(0);
continue;
}
if (check2(left, right)) { //왼쪽 하나 혹은 오른쪽 하나를 지웠을때 회문인지 확인하기
System.out.println(1);
} else {
System.out.println(2);
}
}
}
static boolean check(int left, int right) {
while (left <= right) {
if (arr[left] != arr[right]) {
return false;
}
left += 1;
right -= 1;
}
return true;
}
private static boolean check2(int left, int right) {
while (left <= right) {
if (arr[left] != arr[right]) {
boolean c1 = check(left + 1, right); //왼쪽 하나 지우기
boolean c2 = check(left, right - 1); //오른쪽 하나 지우기
if (c1 || c2) { //둘 중 하나라도 회문이면 1 반환하도록
return true;
} else
return false;
}
left += 1;
right -= 1;
}
return true;
}
}
'Java' 카테고리의 다른 글
[백준 2157] 여행 (JAVA) (0) | 2023.07.11 |
---|---|
[백준 1398] 동전 문제 (JAVA) (0) | 2023.06.27 |
[백준 2258] 정육점 (JAVA) (0) | 2023.06.20 |
[백준 4716] 풍선 (JAVA) (0) | 2023.06.14 |
[코드트리] 포탑 부수기 JAVA 풀이 (삼성 SW 역량 기출문제) (0) | 2023.06.09 |