๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 1213๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

by nitronium102 2022. 7. 24.

๋ฌธ์ œ

์ž„ํ•œ์ˆ˜์™€ ์ž„๋ฌธ๋นˆ์€ ์„œ๋กœ ์‚ฌ๋ž‘ํ•˜๋Š” ์‚ฌ์ด์ด๋‹ค. ์ž„ํ•œ์ˆ˜๋Š” ์„ธ์ƒ์—์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ ๋ฌธ์ž์—ด์„ ๋„ˆ๋ฌด ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‘˜์˜ ๋ฐฑ์ผ์„ ๊ธฐ๋…ํ•ด์„œ ์ž„๋ฌธ๋นˆ์€ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์„ ๋ฌผํ•ด์ฃผ๋ ค๊ณ  ํ•œ๋‹ค.

์ž„๋ฌธ๋นˆ์€ ์ž„ํ•œ์ˆ˜์˜ ์˜์–ด ์ด๋ฆ„์œผ๋กœ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋Š”๋ฐ, ์ž„ํ•œ์ˆ˜์˜ ์˜์–ด ์ด๋ฆ„์˜ ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋ฅผ ์ ์ ˆํžˆ ๋ฐ”๊ฟ”์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.

์ž„๋ฌธ๋นˆ์„ ๋„์™€ ์ž„ํ•œ์ˆ˜์˜ ์˜์–ด ์ด๋ฆ„์„ ํŒฐ๋ฆฐ๋“œ๋กฌ์œผ๋กœ ๋ฐ”๊พธ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž„ํ•œ์ˆ˜์˜ ์˜์–ด ์ด๋ฆ„์ด ์žˆ๋‹ค. ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ๋œ ์ตœ๋Œ€ 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();
}

 

 

๋Œ“๊ธ€