Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 14370 전화번호 수수께끼 (Large) 본문

Programming/BOJ

[백준/BOJ] 14370 전화번호 수수께끼 (Large)

he1fire 2020. 9. 27. 00:51
728x90

문제 : 14370 전화번호 수수께끼 (Large)

 

14370번: 전화번호 수수께끼 (Large)

첫 줄에 테스트케이스의 개수 T가 주어진다. 각 테스트케이스에는 상대방이 제시한 스트링 S가 주어진다. S는 영어 대문자로만 이루어져 있다. 1≤ T ≤ 100이고, S의 길이는 3 이상 2000 이하이다.

www.acmicpc.net

전화번호의 각 자리를 영단어로 바꾸고

이를 뒤섞은 문자열이 주어졌을 때, 원래 전화번호를 알아내는 문제이다.

각 영어로 된 숫자들에서 유일한 문자를 가진 것들을 먼저 찾아내고

그 숫자를 제거했을 때 다시 유일한 문자들을

가진 숫자를 제거하는 식으로 진행하면

0-2-4-6-8-1-3-5-7-9 순서로 구하면 된다는 것을 알 수 있다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<ll,char> plc;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    ll N;
    cin >> N;
    for (int i=1;i<=N;i++){
        string S, ch[10]={"ZERO","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE"};
        ll count[30]={0,};
        ll arr[10]={0,};
        plc turn[10]={{0,'Z'},{2,'W'},{4,'U'},{6,'X'},{8,'G'},
                      {1,'O'},{3,'H'},{5,'F'},{7,'S'},{9,'I'}};
        cin >> S;
        for (int j=0;j<S.size();j++){
            count[S[j]-'A']++;
        }
        for (auto j: turn){
            ll x=count[j.second-'A'];
            arr[j.first]=x;
            for (auto k:ch[j.first]){
                count[k-'A']-=x;
            }
        }
        cout << "Case #" << i << ": ";
        for (int j=0;j<10;j++){
            for (int k=0;k<arr[j];k++){
                cout << j;
            }
        }
        cout << "\n";
    }
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 2879 코딩은 예쁘게  (0) 2020.09.28
[백준/BOJ] 1577 도로의 개수  (0) 2020.09.28
[백준/BOJ] 4388 받아올림  (0) 2020.09.27
[백준/BOJ] 9370 미확인 도착지  (0) 2020.09.26
[백준/BOJ] 1753 최단경로  (0) 2020.09.26
Comments