티스토리 뷰

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

 

해설

  1. counts 배열에 문자 개수 저장
  2. 팰린드롬을 체크할 front, back, mid 생성
    1. StringBuilder를 사용한 이유는 index 지정해서 문자를 추가할 수 있기 때문이다.
  3. counts 배열을 순회
    1. 현재 문자가 2개 이상 저장되어 있다면 front와 back에 저장한다.
      단, back에 저장할 때는 팰린드롬 처리를 해야하므로 0번 인덱스에 삽입한다.
      기존 : AB, 'C' 삽입 후 : CAB
    2. 현재 문자가 1개라면 mid에 저장한다.
      1. 1개의 의미는 팰린드롬을 만들기 위한 중간 문자임을 의미한다.
  4. mid 문자열 길이가 1 이상이면 팰린드롬이 될 수 없음
  5. mid에 맞춰서 출력을 다르게 한다.

코드

import java.io.*;
import java.util.*;

public class Main {

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

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

        for (char c : br.readLine().toCharArray()) {
            counts[c - 'A']++;
        }

        StringBuilder front = new StringBuilder();
        StringBuilder back = new StringBuilder();
        StringBuilder mid = new StringBuilder();

        for (int i = 0; i < 26; i++) {
            char c = (char) (i + 'A');
            while (counts[i] > 1) {
                front.append(c);
                back.insert(0, c);
                counts[i] -= 2;
            }
            if(counts[i] == 1) {
                mid.append(c);
                counts[i]--;
            }
        }

        if(mid.length() > 1) {
            System.out.println("I'm Sorry Hansoo");
        } else {
            System.out.println(front.append(mid).append(back));
        }
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30