입력받은 영어 이름을 팰린드롬으로 바꾸는 문제.
배열 arr
에 영어 이름의 정보를 담은 뒤, 문자열 ret
의 앞과 뒤에 arr
에 담긴 각각의 알파벳을 사전 역순으로 입력받은 개수만큼 추가한다.
mid
가 존재할 시, 반복문을 마친 이후 ret
의 가운데 위치에 mid
를 삽입하여 출력한다.
영어 이름에 홀수 개의 알파벳이 두 개 이상 존재할 시, 오류 문구를 출력해야 한다.
홀수 개의 알파벳을 만날 때마다 flag
에 1을 추가하여, 만약 flag
의 값이 2가 되면 "I'm Sorry Hansoo"를 출력한다.
#include <bits/stdc++.h>
using namespace std;
string s, ret;
int arr[100], flag;
char mid;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> s;
for (char a : s) arr[a]++;
for (int i = 'Z'; i >= 'A'; i--) {
if (arr[i]) {
if (arr[i] & 1) {
mid = char(i);
flag++;
arr[i]--;
}
if (flag == 2) break; // 홀수 개의 알파벳이 두 개 이상 존재할 시, break
for (int j = 0; j < arr[i]; j += 2) {
ret = char(i) + ret;
ret += char(i);
} // ret의 앞과 뒤에 char(i) 추가
}
}
if (flag == 2) cout << "I'm Sorry Hansoo" << '\n';
else {
if (mid) {
ret.insert(ret.begin() + ret.size() / 2, mid);
}
cout << ret << '\n';
}
return 0;
}