[백준] 팰린드롬 만들기
문제
동호와 규완이는 212호에서 문자열에 대해 공부하고 있다. 규완이는 팰린드롬을 엄청나게 좋아한다. 팰린드롬이란 앞에서부터 읽으나 뒤에서부터 읽으나 같게 읽히는 문자열을 말한다.
동호는 규완이를 위한 깜짝 선물을 준비했다. 동호는 규완이가 적어놓고 간 문자열 S에 0개 이상의 문자를 문자열 뒤에 추가해서 팰린드롬을 만들려고 한다. 동호는 가능하면 가장 짧은 문자열을 만들려고 한다.
동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.
출력
첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.
예제 입력 1 복사
abab
예제 출력 1 복사
5
풀이
- 팰린드롬이 홀수일 경우와 짝수일 경우로 나뉘어 풀 수 있었다.
- 길이가 홀수일 경우
- len-2 부터 시작해서 [i-J+1][i+J]를 탐색한다
-
길이가 짝수일 경우
- 문자 길이가 2로 나눴을때 1이 남는다면 길이에 +1을 더해준다
- len-2 부터 시작해서 [i-j+1][i+j]를 탐색한다
-
길이가 짧은 것을 answer에 담는다.
코드
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] chars = br.readLine().toCharArray();
int len = chars.length;
int answer = (len-1) * 2 + 1;
if (len == 1){
System.out.println(1);
return;
}
// 홀수일 경우
loop : for (int i = len-2 ; i > len/2-1 ; i--){
for (int j = 1; j + i < len; j++){
if (chars[i-j] != chars[i+j]) continue loop;
}
answer = Math.min(answer, i * 2 + 1 );
}
// 짝수일 경우
int end = len;
if (len % 2 == 1) end++;
loop : for (int i = len-2 ; i >= end/2-1 ; i--){
for (int j = 1; j + i < len; j++){
if (chars[i-j+1] != chars[i+j]) continue loop;
}
answer = Math.min(answer, (i+1)*2) ;
}
System.out.println(answer);
}
}
Author And Source
이 문제에 관하여([백준] 팰린드롬 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hoony-code/백준-팰린드롬-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)