시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 128 MB | 9762 | 4288 | 3581 | 45.688% |
동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.
동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.
동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.
첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.
첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.
abab
5
abacaba
7
qwerty
11
abdfhdyrbdbsdfghjkllkjhgfds
38
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int len = str.length();
// 1. 문자열 중간에 팰린드롬이 있는지 알아야 함!
for (int i = 0; i < str.length(); i++) {
if (isPalindrome(str.substring(i))) {
break;
}
//3. 팰린드롬 아니면 같은 문자 하나 추가해줘야 하니까 길이 1 추가
len++;
}
System.out.println(len);
}
private static boolean isPalindrome(String str) {
int start = 0;
int end = str.length() - 1;
// 2. 문자열 맨 앞, 맨 뒤부터 좁혀가면서 팰린드롬인지 확인
while (start <= end) {
if (str.charAt(start) != str.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
}
몰랐는데, 내가 쓴 방법이 투포인터(Two Pointer) 알고리즘이라고 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Q1254 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
if(isPal(str)) {
System.out.println(str.length());
return;
}
int cnt = 1;
while(true){
str = str.substring(1);
if(isPal(str)) {
System.out.println(str.length() + 2 * cnt);
return;
}
cnt++;
}
}
static boolean isPal(String s){
for(int i=0; i<s.length()/2; i++){
if(s.charAt(i) != s.charAt(s.length()-i-1)) return false;
}
return true;
}
}