8000 Merge pull request #464 from neppiness/1213 · kwon5346/basic-algo-lecture@95db32e · GitHub
[go: up one dir, main page]

Skip to content

Commit 95db32e

Browse files
Merge pull request encrypted-def#464 from neppiness/1213
update: Appendix A. 1213.cpp
2 parents ce142f0 + c348f3d commit 95db32e

File tree

1 file changed

+64
-5
lines changed

1 file changed

+64
-5
lines changed

Appendix A/solutions/1213.cpp

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,70 @@
1-
// Authored by : BaaaaaaaaaaarkingDog
1+
// Authored by : scsc3204
22
// Co-authored by : -
3-
// http://boj.kr/****************
3+
// http://boj.kr/145ce16e207d42008ec94abf8489ec73
44
#include <bits/stdc++.h>
55
using namespace std;
66

7-
int main(void){
7+
int cnt[26];
8+
9+
int ctoi(char c) { return c - 'A'; }
10+
11+
int main() {
812
ios::sync_with_stdio(0);
913
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

Comments
 (0)
0