문제(출처: https://www.acmicpc.net/problem/1254)
< 팰린드롬 만기 >
문제 풀이
짝수일 때와 홀수일 때를 고려해서 팰린드롬을 구한다.
* 사실 계속 틀려서 고치고 고치느라 나도 모르겠다
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _1254_ { // 팰린드롬 만들기
	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String S = bf.readLine();
		int answer = Integer.MAX_VALUE;
		boolean flag = false;
		if (S.length() == 1) {
			answer = 1;
		} else if (S.length() == 2 && S.charAt(0) == S.charAt(1)) {
			answer = 2;
		} else {
			for (int i = S.length() / 2 - 1; i < S.length(); i++) {
				boolean check = false;
				if (i + 1 < S.length() && S.charAt(i) == S.charAt(i + 1) && i>=S.length()-i-2) {
					for (int j = 1; j <= i; j++) {
						if (i + 1 + j >= S.length()) {
							answer = Math.min(answer, i + i + 2);
							flag = true;
							check = true;
							break;
						}
						if (S.charAt(i - j) != S.charAt(i + 1 + j)) {
							check = true;
							break;
						}
					}
					if (!check) {
						answer = Math.min(answer, S.length());
					}
				}
				if (i < S.length() - 1 - i) {
					continue;
				}
				check = false;
				for (int j = 1; j <= i; j++) {
					if (i + j >= S.length()) {
						answer = Math.min(answer, i + i + 1);
						flag = true;
						check = true;
						break;
					}
					if (S.charAt(i - j) != S.charAt(i + j)) {
						check = true;
						break;
					}
				}
				if (!check) {
					answer = Math.min(answer, S.length());
					break;
				}
				if (flag) {
					break;
				}
			}
		}
		System.out.println(answer);
	}
}변수)
S : 문자열
answer : 가장 짧은 팰린드롬의 길이
flag : 팰린드롬 찾은 경우
check : 문자 추가 없이 팰린드롬인 경우
문자열을 입력받는다. 길이가 1일 때는 팰린드롬이므로 1을 출력하고 2일 때 똑같은 문자라면 2를 출력한다. 그 이외는
1) acca와 같은 짝수 팰린드롬을 구하기 위해 비교한다.
2) abcba와 같은 홀수 팰린드롬을 구하기 위해 비교한다.
최종 만들 수 있는 가장 짧은 팰린드롬의 길이를 출력한다.

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
| [Baekjoon] 2238_경매 (0) | 2024.08.09 | 
|---|---|
| [Baekjoon] 13717_포켓몬 GO (2) | 2024.08.08 | 
| [Baekjoon] 2304_창고 다각형 (0) | 2024.08.05 | 
| [Baekjoon] 2508_사탕 박사 고창영 (0) | 2024.08.02 | 
| [Baekjoon] 4921_나무 블록 (0) | 2024.08.01 |