내가 생각했을때 문제에서 원하는부분
첫째 줄에 문자열 S가 주어진다.
S는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다.
첫째 줄에 동호가 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 입력으로부터 문자열 S를 읽어온다.
문자열 S의 길이를 n에 저장하고, 최소 팰린드롬 길이를 초기값으로 S의 길이로 설정한다.
문자열 S의 접두사를 하나씩 확인한다.
S.substring(i)는 S의 i번째 인덱스부터 끝까지의 부분 문자열을 반환한다.
이 부분 문자열이 팰린드롬인지 확인하기 위해 isPalindrome 메서드를 호출한다.
만약 팰린드롬이라면, 추가해야 할 문자의 수는 n + i가 되며, 이를 minLength에 저장하고 반복문을 종료한다.
최종적으로 계산된 최소 팰린드롬의 길이를 출력한다.
주어진 문자열이 팰린드롬인지 확인하는 메서드이다.
문자열의 양 끝에서부터 중앙으로 가면서 문자를 비교한다.
만약 두 문자가 다르면 false를 반환하고, 모두 같으면 true를 반환한다.
코드로 구현
package baekjoon.baekjoon_25;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 1254번 문제
public class Main863 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
int n = S.length();
int minLength = n; // 최소 팰린드롬 길이는 S의 길이로 시작
// S의 접두사를 확인하여 팰린드롬이 되는 길이를 찾기
for(int i = 0; i < n; i++) {
// S의 접두사를 뒤집어서 S와 비교
if(isPalindrome(S.substring(i))) {
minLength = n + i; // 필요한 추가 문자 수
break;
}
}
System.out.println(minLength);
br.close();
}
// 주어진 문자열이 팰린드롬인지 확인하는 메서드
static boolean isPalindrome(String str) {
int left = 0;
int right = str.length() - 1;
while(left < right) {
if(str.charAt(left) != str.charAt(right)) {
return false;
}
left++;
right--;
}
return true;
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.