[λ°±μ€/C++] 1213λ²: ν°λ¦°λ둬 λ§λ€κΈ°
λ¬Έμ
μνμμ μλ¬ΈλΉμ μλ‘ μ¬λνλ μ¬μ΄μ΄λ€. μνμλ μΈμμμ ν°λ¦°λλ‘¬μΈ λ¬Έμμ΄μ λ무 μ’μνκΈ° λλ¬Έμ, λμ λ°±μΌμ κΈ°λ ν΄μ μλ¬ΈλΉμ ν°λ¦°λ둬μ μ λ¬Όν΄μ£Όλ €κ³ νλ€.
μλ¬ΈλΉμ μνμμ μμ΄ μ΄λ¦μΌλ‘ ν°λ¦°λ둬μ λ§λ€λ €κ³ νλλ°, μνμμ μμ΄ μ΄λ¦μ μνλ²³ μμλ₯Ό μ μ ν λ°κΏμ ν°λ¦°λ둬μ λ§λ€λ €κ³ νλ€.
μλ¬ΈλΉμ λμ μνμμ μμ΄ μ΄λ¦μ ν°λ¦°λ둬μΌλ‘ λ°κΎΈλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ μνμμ μμ΄ μ΄λ¦μ΄ μλ€. μνλ²³ λλ¬Έμλ‘λ§ λ μ΅λ 50κΈμμ΄λ€.
μΆλ ₯
첫째 μ€μ λ¬Έμ μ μ λ΅μ μΆλ ₯νλ€. λ§μ½ λΆκ°λ₯ν λλ "I'm Sorry Hansoo"λ₯Ό μΆλ ₯νλ€. μ λ΅μ΄ μ¬λ¬ κ°μΌ κ²½μ°μλ μ¬μ μμΌλ‘ μμλ κ²μ μΆλ ₯νλ€.
νμ΄
ν°λ¦°λ둬μλ part1 + part2 + part3 (part1μ λμΉ)μΌλ‘ ꡬμ±λμ΄ μλ€.
λ¨Όμ κ° μνλ²³μ μλ₯Ό μΌ ν, μ¬μ μμΌλ‘ μ½μ΄κ°λ©΄μ part1κ³Ό part3μ νλμ© ν λΉνλ€.
λ§μ½ μνλ²³μ μκ° νμμΈ κ²½μ°, part2μ ν λΉνλ€. κ·Έλ¬λ part2κ° μ΄λ―Έ μ‘΄μ¬νλ€λ©΄ ν°λ¦°λλ‘¬μ΄ λΆκ°λ₯νλ€. (λμΉ λΆκ°)
#include <iostream>
using namespace std;
int alphabet[26] = {0,};
/*
* λμΉλ¬Έμμ΄ + μ€κ° λ¬Έμ(0~1κΈμ) + λμΉλ¬Έμμ΄
* 1. κ° μνλ²³μ΄ λͺ κ°μΈμ§ μ μ₯
* 2. μ¬μ μμΌλ‘ μμ ν λ¦°λ둬 μ μμ± -> λμΉ λ¬Έμμ΄μ νλμ© ν λΉ
* 3. λ§μ½ μνλ²³μ μκ° νμμΈ κ²½μ°, μ€κ° λ¬Έμμ ν λΉ. λ§μ½ μ΄λ―Έ μ€κ° λ¬Έμκ° μλ€λ©΄ ν°λ¦°λ둬 λΆκ° μΆλ ₯
*/
string makePelindrome() {
string part1 = "", part2 = "", part3 = "";
for (int i = 0; i < 26; i++) {
if (alphabet[i] % 2 == 1) {
if (part2.size() == 1)
return "I'm Sorry Hansoo";
part2 = (char) (i + 'A');
}
for (int j = 0; j < alphabet[i] / 2; j++) {
part1 += (char) (i + 'A');
part3 = (char) (i + 'A') + part3; // λμΉμΌλ‘ λν΄μ ΈμΌ νκΈ° λλ¬Έμ +=λ₯Ό μ°λ©΄ μ λλ€!
}
}
return part1 + part2 + part3;
}
int main() {
string name;
cin >> name;
// 1λ² : μνλ²³ κ°μ μ μ₯
for (int i = 0; i < name.length(); i++)
alphabet[name[i] - 'A']++;
// 2λ² : ν°λ¦°λ둬 μ μμ±
cout << makePelindrome();
}