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 |