https://www.acmicpc.net/problem/14370
안그래도 문자열에 약한데 애드혹까지 섞이니 뇌정지가 오는 문제였습니다.
우선 문자열이 섞여있는 채로 저장되어있고, 문자열이 어떤 수들로 구성되어 있는지 파악해야 합니다.
그러면 각 숫자들의 고유한 알파벳을 구해서 카운팅하는 방법을 떠올릴 수 있습니다.
0 2 4 6 8은 각각 고유한 알파벳이 있습니다.
0 - Z
2 - W
4 - U
6 - X
8 - G
그리고 이들을 제외한 숫자들 중 고유한 알파벳을 뽑으면
3 - H
5 - F
7 - S
9 - I
1 - O
순서대로 이렇게 가져올 수 있습니다.
먼저 입력으로 들어온 문자열의 문자들을 모두 카운팅합니다.
이후 위에서 구한 알파벳을 순서대로 가져와서 카운팅을 빼주면서 정답을 구하는 방식으로 구현했습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#include <iostream>
#include <string>
#include <cstring>
#define MAX 10
using namespace std;
string str;
string alpha[MAX] = { "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE" };
pair<int, char> ch[MAX] = { {0,'Z'}, {2,'W'}, {4, 'U'}, {6, 'X'}, {8, 'G'}, {3,'H'}, {5, 'F'}, {7, 'S'}, {9, 'I'}, {1,'O'} };
int alphaCnt[26];
int cnt[MAX];
int len;
void solve() {
for (auto c : ch) {
while (alphaCnt[c.second - 'A']) {
cnt[c.first]++;
for (auto a : alpha[c.first]) {
alphaCnt[a - 'A']--;
}
}
}
}
void func(int tc) {
for (auto x : str) {
alphaCnt[x - 'A']++;
}
solve();
cout << "Case #" << tc << ": ";
for (int i = 0; i < MAX; i++) {
while (cnt[i]--) {
cout << i;
}
}
cout << '\n';
}
void input() {
cin >> str;
len = str.size();
}
void init() {
memset(cnt, 0, sizeof(cnt));
memset(alphaCnt, 0, sizeof(alphaCnt));
}
int main() {
cin.tie(NULL); cout.tie(NULL);
ios::sync_with_stdio(false);
int tc;
cin >> tc;
for (int t = 1; t <= tc; t++) {
input();
func(t);
init();
}
return 0;
}
|
cs |
'algorithm > ad-hoc' 카테고리의 다른 글
boj 16161 가장 긴 증가하는 팰린드롬 부분수열 (0) | 2024.08.15 |
---|---|
boj 24553 팰린드롬 게임 (0) | 2024.08.07 |
boj 21316 스피카 (0) | 2024.08.05 |
boj 10350 Banks (0) | 2024.07.31 |
boj 5527 전구 장식 (0) | 2024.07.30 |