Programming/BOJ

[백준/BOJ] 1213 팰린드롬 만들기

he1fire 2020. 9. 18. 21:02
728x90

문제 : 1213 팰린드롬 만들기

 

1213번: 팰린드롬 만들기

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

www.acmicpc.net

문자열을 입력받아 순서를 바꾸어 팰린드롬으로 만들어 출력하는 문제이다.

어떤 문자의 개수가 홀수인 경우가 2개 이상이 되면 불가능한 경우이고,

가능할 경우에는 사전 순으로 가장 빠른 것을 출력해야 하기 때문에

배열 앞에서부터 순차적으로 출력하고 홀수개인 것을 출력한 뒤,

다시 뒤에서부터 순차적으로 출력하면 된다. 


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll arr[30]={0}, chk=0;
    string S;
    cin >> S;
    for (int i=0;i<S.size();i++){
        arr[S[i]-'A']++;
    }
    for (int i=0;i<26;i++){
        if (arr[i]%2)
            chk++;
    }
    if (chk>1){
        cout << "I'm Sorry Hansoo";
    }
    else{
        for (int i=0;i<26;i++){
            for (int j=0;j<arr[i]/2;j++)
                cout << (char)(i+'A');
        }
        for (int i=0;i<26;i++){
            if (arr[i]%2)
                cout << (char)(i+'A');
        }
        for (int i=25;i>=0;i--){
            for (int j=0;j<arr[i]/2;j++)
                cout << (char)(i+'A');
        }
    }
    return 0;
}
728x90