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 |