본문 바로가기
코딩/백준-자바

[자바] 백준 1213번: 팰린드롬 만들기

by 철없는민물장어 2023. 1. 10.
728x90
반응형

https://www.acmicpc.net/problem/1213

 

1213번: 팰린드롬 만들기

첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.

www.acmicpc.net

 

데칼코마니가 되는 문자를 만들기다.

문자열을 입력받은 후,

알파벳당 문자열에 쓰인 횟수를 기록한다.

 

팰린드롬이 되기 위해서는 모든 알파벳이 짝수개거나, 하나의 알파벳만 홀수개여야 한다.

(-하나의 알파벳만 홀수개인 경우, 해당 알파벳을 가장 중앙에 위치시켜야 함)

 

팰린드롬을 만들 수 있게 판별되었다면

StringBuffer의 insert메소드를 이용해여 문자열의 중앙에 알파벳을 차곡차곡 쌓도록 하고,

홀수개를 가진 알파벳의 문자 하나는 가장 중앙에 두게 한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class P1213 {

	static int[] arr = new int[26];

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuffer name = new StringBuffer();
		name.append(br.readLine());

		for (int i = 0; i < name.length(); i++) {
			arr[name.charAt(i) - 'A']++;
		}

		int count = 0;
		int single_alphabet = -1;
		for (int i = 0; i < 26; i++) {
			if (arr[i] % 2 != 0) {
				count++;
				single_alphabet = i;
				if (count > 1) {
					System.out.println("I'm Sorry Hansoo");
					return;
				}
			}
		}

		StringBuffer sb = new StringBuffer();
		int middle = 0;
		for (int i = 0; i < 26; i++) {

			if (i == single_alphabet) {
				for (int j = 0; j < arr[i] - 1; j++) {
					sb.insert(middle, (char) (i + 'A'));
				}
			} else {
				for (int j = 0; j < arr[i]; j++) {
					sb.insert(middle, (char) (i + 'A'));
				}
			}
			middle = sb.length() / 2;

		}
		if (single_alphabet != -1) {
			sb.insert(middle, (char) (single_alphabet + 'A'));
		}

		System.out.println(sb);

	}

}

 

 

728x90
반응형

댓글