본문 바로가기
백준/1 - 5000

[백준] 1213번 : 팰린드롬 만들기(JAVA)

by lms0806 2021. 8. 16.
728x90
반응형

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

 

1213번: 팰린드롬 만들기

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

www.acmicpc.net

풀이

글자를 입력받고 alpha배열로 1글자씩 갯수를 세줍니다.

글자 길이가 홀수인데 1개뿐인 숫자가 여러개거나, 글자의 길이가 짝수인데 1개뿐인 숫자가 있거나 하면 "I'm Sorry Hansoo"를 출력해줍니다.

아닐 경우 갯수가 짝수인 글자들을 더해주고, 홀수인 글자가 있으면 더한 후, 짝수인 글자들을 뒤집어서 더해주면 됩니다.

 

소스코드

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 s = br.readLine();
		
		int[] alpha = new int[26];
		
		for(char ch : s.toCharArray()) {
			alpha[ch - 'A']++;
		}
		
		int n = 0, mid = 0;
		for(int i = 0; i < 26; i++) {
			if(alpha[i] % 2 == 1) {
				mid = i;
				n++;
			}
		}
		
		StringBuilder sb = new StringBuilder();
		if((s.length() % 2 == 1 && n > 1) || (s.length() % 2 == 0 && n > 0)) {
			sb.append("I'm Sorry Hansoo");
		}
		else {
			String answer = "";
			for(int i = 0; i < 26; i++) {
				for(int j = 0; j < alpha[i] / 2; j++) {
					answer += (char)(i + 'A');
				}
			}
			
			String rev = new StringBuilder(answer).reverse().toString();
			if(n == 1) {
				answer += (char)(mid + 'A');
			}
			
			sb.append(answer + rev);
		}
		System.out.print(sb);
	}
}
728x90
반응형

댓글