1) 각 문자 중에서 홀수는 단 한번만 나와야 하고, 홀수가 2개 이상이면 불가하다.
2) 홀수 번이 있다면 가운데로 위치하고,
3) 문제에서 알파벳 앞선 숫자로 나와야 하므로, 앞선 순에서 부터 하면 된다.
4) 문자열 만들 때 s1 + s2 식으로 나오게 할 거고, 그러면 반절씩 s1, s2가 가져가는데, s2는 뒤집기만 하면 된다.
#include <iostream>
#include <string>
#include <map>
using namespace std;
#include <algorithm>
#include <list>
//팰린드롬/
// 카운팅으로 풀었을 때와
// map으로 풀었을 때의 시간을 측정해보자.
int main()
{
//홀수인 알파벳은 최소 1개가 있어야함.
// 2개이상일 경우, 종료
//사전 순이므로, 일단 정렬을 한후,,,
// 가장 앞선 것을 먼저 위치시켜야 함.
// 어제 생각했을 때는 head에다가 반절..
// tail에다가 반절인데
//만약 aaaabbbbcccc
// 일경우
//aabbcc ccbbaa 이므로.
// tail부분을 어떻게 처리할지 생각해야함.
//tail 부분을 aa 넣고 앞에다가 bb 앞에다가 cc 를 넣어야함.
string s;
cin >> s;
sort(s.begin(), s.end());
string head = "";
string tail = "";
string mid = "";
//카운팅 체크를 해야함.
//홀수가 있을 때 mid로 설정.
map<char, int>m;
for (auto iter : s)
{
m[iter]++;
}
int cnt = 0;
//카운팅
for (auto iter : m)
{
if (iter.second % 2 != 0)
{
++cnt;
mid = iter.first;
}
}
list<char>l;
if (cnt > 1)
cout << "I'm Sorry Hansoo";
else
{
// 알파벳 순으로 진행함.
for (auto iter : m)
{
for (int i = 0; i < iter.second / 2; ++i)
{
head += iter.first;
l.push_front(iter.first);
}
}
for(auto iter : head)
{
cout << iter;
}
cout << mid;
for (auto iter : l)
{
cout << iter;
}
}
}
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
#include <list>
int main()
{
list<char>l;
int arr[26]{0,};
string word;
cin >> word;
for (char iter : word)
{
++arr[iter - 'A'];
}
//string result = "";
int cnt{ 0 };
// 홀수가 2개 이상이면 종료
// 홀수 처리는 나머지 연산자와 &연산자를 통해 찾을 수 있음.
for (int i = 25; i >= 0; --i)
{
//for (int k = 0; k < arr[i]; k += 2)
//{
// l.push_back(i + 'A');
// l.push_front(i + 'A');
//}
if ( ( arr[i] & 1 ) == 1)
{
++cnt;
if (cnt >= 2)
{
cout << "I'm Sorry Hansoo";
return 0;
}
// 가운데다가 넣어야 함...
//auto iter = l.begin() + l.size() / 2;
//l.insert( iter , i + 'A');
int a = l.size() / 2;
// 리스트는 랜덤 반복자가 아니므로, 인덱스 접근 불가능함...
auto iter = l.begin();
for (int l = 0; l < a; l++)
iter++;
l.insert(iter, i + 'A');
//카운팅은 여러개일 수도..
// 중간에 들어가야해
for (int k = 0; k < arr[i] - 1; k+= 2)
{
l.push_back(i + 'A');
l.push_front(i + 'A');
}
}
else if (arr[i] != 0)
{
// 앞 뒤로 넣자.
for (int k = 0; k < arr[i]; k += 2)
{
l.push_front(i + 'A');
l.push_back(i + 'A');
}
}
}
for (auto iter : l)
{
cout << iter;
}
}