1
- // Authored by : BaaaaaaaaaaarkingDog
1
+ // Authored by : scsc3204
2
2
// Co-authored by : -
3
- // http://boj.kr/****************
3
+ // http://boj.kr/145ce16e207d42008ec94abf8489ec73
4
4
#include < bits/stdc++.h>
5
5
using namespace std ;
6
6
7
- int main (void ){
7
+ int cnt[26 ];
8
+
9
+ int ctoi (char c) { return c - ' A' ; }
10
+
11
+ int main () {
8
12
ios::sync_with_stdio (0 );
9
13
cin.tie (0 );
10
-
11
- }
14
+
15
+ string s; cin >> s;
16
+ for (auto c : s)
17
+ cnt[ctoi (c)]++;
18
+
19
+ int odd_cnt = 0 ;
20
+ char odd_al;
21
+ for (char c = ' A' ; c <= ' Z' ; c++) {
22
+ if (cnt[ctoi (c)] % 2 == 0 ) continue ;
23
+ odd_cnt++; odd_al = c;
24
+ }
25
+
26
+ if (odd_cnt > 1 ) {
27
+ cout << " I'm Sorry Hansoo" ;
28
+ return 0 ;
29
+ }
30
+
31
+ if (odd_cnt) cnt[ctoi (odd_al)]--;
32
+
33
+ for (char c = ' A' ; c <= ' Z' ; c++) {
34
+ int x = cnt[ctoi (c)] / 2 ;
35
+ while (cnt[ctoi (c)] != x) {
36
+ cout << c;
37
+ cnt[ctoi (c)]--;
38
+ }
39
+ }
40
+
41
+ if (odd_cnt) cout << odd_al;
42
+
43
+ for (char c = ' Z' ; c >= ' A' ; c--) {
44
+ while (cnt[ctoi (c)] != 0 ) {
45
+ cout << c;
46
+ cnt[ctoi (c)]--;
47
+ }
48
+ }
49
+ }
50
+ /*
51
+ 입력 받은 문자열에서 각 알파뱃의 등장 횟수를 세고
52
+ 이를 cnt 변수에 저장한다(15-17번째 줄).
53
+
54
+ 이중 등장 횟수가 홀수인 알파뱃을 확인한다(19-24번째 줄).
55
+ 만약, 등장 횟수가 홀수인 알파뱃이 1개보다 많다면
56
+ I'm Sorry Hansoo 문자열을 출력하고 함수를 종료한다.
57
+
58
+ 등장 횟수가 홀수인 알파뱃은 그중 하나가
59
+ 반드시 문자열 정중앙에 위치해야 하기 때문에,
60
+ 횟수를 하나 감소시킨 채로 odd_al 변수에 할당해둔다.
61
+
62
+ 이후 A부터 Z까지 확인하면서 cnt가 절반에 도달할 때까지
63
+ 해당 문자를 출력하면서 cnt를 감소시킨다(33-39번째 줄).
64
+
65
+ 이제 문자열 앞부분 절반이 출력됐으므로,
66
+ 만약 odd_cnt에 수가 있다면 odd_al을 출력해 중앙에 위치시킨다(41번째 줄).
67
+
68
+ 이후 Z부터 A까지 역순으로 for문을 돌면서
69
+ cnt가 0이 될 때까지 감소시키면서 해당 문자를 출력한다(43-48번째 줄).
70
+ */
0 commit comments