C++ ๋ฐฑ์ค€ 1213 _ ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

2023. 2. 10. 23:59ใ†๐Ÿ“š Algorithm/๐Ÿ‘€ C++ ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•

[C++ - ๋ฐฑ์ค€ 1213] ๋ฌธ์ œ

 

1213๋ฒˆ: ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Š” "I'm Sorry Hansoo"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

๋ฌธ์ œ ์„ค๋ช…

์ž„ํ•œ์ˆ˜์™€ ์ž„๋ฌธ๋นˆ์€ ์„œ๋กœ ์‚ฌ๋ž‘ํ•˜๋Š” ์‚ฌ์ด์ด๋‹ค.

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

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

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

 

์ œํ•œ ์‚ฌํ•ญ

์ฒซ์งธ ์ค„์— ์ž„ํ•œ์ˆ˜์˜ ์˜์–ด ์ด๋ฆ„์ด ์žˆ๋‹ค. ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ๋œ ์ตœ๋Œ€ 50๊ธ€์ž์ด๋‹ค.

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Š” "I'm Sorry Hansoo"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ •๋‹ต์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

์˜ˆ์ œ ์ž…๋ ฅ 1 

AABB

์˜ˆ์ œ ์ถœ๋ ฅ 1 

ABBA

์˜ˆ์ œ ์ž…๋ ฅ 2 

AAABB

์˜ˆ์ œ ์ถœ๋ ฅ 2 

ABABA

์˜ˆ์ œ ์ž…๋ ฅ 3 

ABACABA

์˜ˆ์ œ ์ถœ๋ ฅ 3

AABCBAA

์˜ˆ์ œ ์ž…๋ ฅ 4

ABCD

์˜ˆ์ œ ์ถœ๋ ฅ 4 

I'm Sorry Hansoo
 

ํ’€์ด ๊ณผ์ •

ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž…๋ ฅ string์˜ ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

๋‹จ ํŒฐ๋ฆฐ๋“œ๋กฌ์˜ ๊ทœ์น™์œผ๋กœ, ๋ฌธ์ž(char)์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™€์ˆ˜ ์ธ ๊ฒƒ์ด 2๊ฐœ ์ด์ƒ์ด๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค!

 -> ๊ทธ๋ž˜์„œ a~z ์ˆœ์œผ๋กœ cnt์— ์•ŒํŒŒ๋ฒณ ๊ฐฏ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

i = 'Z' ~ 'A' ๊นŒ์ง€ ์ˆœํšŒ ํ•˜๊ธฐ

- ๋ฌธ์ œ์—์„œ ์ •๋‹ต์ด ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ, ์‚ฌ์ „์ˆœ์œผ๋กœ ์•ž์„œ๋Š” ๊ฒƒ์„ ์ถœ๋ ฅํ•˜๋ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—

ret ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ• ๋•Œ๋Š” 'Z' ๋ถ€ํ„ฐ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

๊ทธ๋ž˜์•ผ ex) ZAZ -> BZAZB -> ABZAZBA ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ!

 

cnt[i] & 1 ์€ ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ ํ™€์ˆ˜์ธ์ง€ ์ง์ˆ˜์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค

- ํ™€์ˆ˜ ์ธ๊ฒฝ์šฐ mid ๊ฐ’์— ์ €์žฅํ•˜๊ณ  flag๋กœ ํ™€์ˆ˜์ธ ์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค (2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ!)

 

์ถ”ํ›„ ์œ„์—์„œ ์ €์žฅํ•œ mid char ์„ ret ๋ฌธ์ž์—ด ์ •์ค‘์•™ (๊ฐ€์šด๋ฐ)์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์™„์„ฑ๋œ๋‹ค

#include <bits/stdc++.h>

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);

  string str;
  cin >> str;
  int cnt[200] = {0,};
  string ret = "";
  
  for (auto ch : str) {
    cnt[ch] ++;
  }
  char mid = ' ';
  int flag = 0;
  for (int i = 'Z'; i >= 'A'; i--) {
    if (cnt[i]) {
      if (cnt[i] & 1) {
        mid = char(i); // ํ™€์ˆ˜๋Š” ์ค‘์•™์— ๋„ฃ์–ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ
        flag ++;
        cnt[i] --;
      }
      if (flag == 2) break;
      for (int j = 0; j < cnt[i]; j += 2) {
        ret = char(i) + ret;
        ret += char(i);
      }
    }
  }
  if (mid != ' ') ret.insert(ret.begin() + ret.size() / 2, mid);
  if (flag == 2) cout << "I'm Sorry Hansoo\n";
  else cout << ret << '\n';
  return 0;
}

 

๋ฐ˜์‘ํ˜•