문제 바로가기 : https://www.acmicpc.net/problem/23304
메모리 : 57976KB
시간 : 280ms
언어 : Java 11
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static String str;
static boolean flag;
public static <T> void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
flag = true;
int len = str.length();
pal(0, len - 1);
for (int i = len / 2; i > 0 && flag; i /= 2) {
pal(0, i - 1);
}
if (flag) {
System.out.println("AKARAKA");
} else {
System.out.println("IPSELENTI");
}
}
private static void pal(int left, int right) {
if (left >= right) {
flag = true;
return;
}
if (str.charAt(left) == str.charAt(right)) {
pal(left + 1, right - 1);
} else {
flag = false;
}
}
}
팰린드롬인가 검사하는 문제! 그런데 접두사와 접미사가 또 팰린드롬이어야한다. 문자열 S가 아카라카 팰린드롬인가? 는 S의 접두사와 접미사를 다시 검사해야하는데, 다시 검사하는 경우 "S의 접두사" 가 다시 S가 되기 떄문에 "S의 접두사의 접두사" 가 또 팰린드롬이어야 한다.
이런 구조를 가졌기 때문에 재귀로 문제를 해결해야한다. flag 는 팰린드롬인가 검사하는 변수이다. for문에서 flag가 false인지를 검사하고있기 때문에, 팰린드롬이 아닌 경우 바로 for문이 종료되고 정답을 출력할 수 있다.
'Algorithm' 카테고리의 다른 글
[Algo] 백준 16236 아기 상어 JAVA (0) | 2024.05.07 |
---|---|
[Algo] 백준 16938 캠프 준비 JAVA (0) | 2024.05.07 |
[Algo] 백준 1106 호텔 JAVA (0) | 2024.05.07 |
[Algo] 백준 12865 평범한 배낭 JAVA (0) | 2024.05.07 |
[Algo] 백준 27377 읽씹 멈춰! JAVA (0) | 2024.05.07 |