백준

백준 1213 팰린드롬 만들기(Java)

Park DJ 2023. 2. 4. 02:00

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

 

1213번: 팰린드롬 만들기

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

www.acmicpc.net


 

해석 및 팁

 


 

먼저 배열에 입력받은 문자열의 알파벳의 개수를 저장해 줍니다. 길이가 홀수인데 1개뿐인 숫자가 여러 개 거나 글자의 길이가 짝수인데 1개뿐인 숫자가 있거나 개수가 홀수인 알파벳이 2개 이상 있으면 팰린드롬수를 만들 수 없으므로 I'm Sorry Hansoo를 출력해주면됩니다. 만들 수 있는 경우에는 먼저 문자열의 절반을 list에 저장합니다. 그다음 홀수 있으면 절반의 문자열중 앞부분에 더합니다. 그다음 반대쪽을 만들기 위해 뒤집어서 합치면 됩니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
    StringBuilder list = new StringBuilder();

    int[] alpha = new int[26];
    String str = sc.next();

    for(int i = 0; i < str.length(); i++) alpha[str.charAt(i) - 'A']++;

    int odd = 0;
    int index = 0;

    for(int i = 0; i < 26; i++) {
      if(alpha[i] % 2 == 1) {
        odd++;
        index = i;
      }
    }
    
    if((str.length() % 2 == 1 && odd > 1) || (str.length() % 2 == 0 && odd > 0) || odd >= 2) sb.append("I'm Sorry Hansoo");

    else {
      
      for(int i = 0; i < 26; i++) {
        for(int j = 0; j < alpha[i] / 2; j++) list.append((char)(i + 'A'));
      }

      String ori = list.toString();
      String rev = list.reverse().toString();

      if(odd == 1) ori += (char)(index +'A');

      sb.append(ori + rev);
    }
    
    System.out.println(sb);
  }
}