"전화번호가 뭐에요?"
"제 전화번호의 각 자리를 영어단어로 바꾸고, 철자를 잘 섞으면 OZONE TOWER가 나와요."
"예?"
"그리고 제 전화번호는 오름차순으로 정렬되어 있어요."
"..."
입력
첫 줄에 테스트케이스의 개수 T가 주어진다. 각 테스트케이스에는 상대방이 제시한 스트링 S가 주어진다. S는 영어 대문자로만 이루어져 있다.
1≤ T ≤ 100이고, S의 길이는 3 이상 20 이하이다. 모든 테스트케이스에는 유일한 해답이 있다.
출력
각 줄에 테스트케이스 번호 x와 전화번호 y를 Case #x: y의 형태로 출력한다.
예제 입력 1
4 OZONETOWER WEIGHFOXTOURIST OURNEONFOE ETHER |
예제 출력 1
Case #1: 012 Case #2: 2468 Case #3: 114 Case #4: 3 |
힌트
ZERO ONE TWO의 철자를 잘 배열하면 OZONETOWER가 나온다.
더보기
Solution
#include<stdio.h>
#include<string.h>
int main(void)
{
int T;
scanf("%d", &T);
for(int t=1;t<=T;t++)
{
char S[21]={'\0', };
int alphabet[26]={0, }, number[10]={0, };
scanf("%s", S);
for(int s=0;s<strlen(S);s++)
alphabet[S[s]-'A']++;
if(alphabet['Z'-'A']>0)
{
number[0]=alphabet['Z'-'A'];
alphabet['Z'-'A']-=number[0];
alphabet['E'-'A']-=number[0];
alphabet['R'-'A']-=number[0];
alphabet['O'-'A']-=number[0];
}
if(alphabet['W'-'A']>0)
{
number[2]=alphabet['W'-'A'];
alphabet['T'-'A']-=number[2];
alphabet['W'-'A']-=number[2];
alphabet['O'-'A']-=number[2];
}
if(alphabet['U'-'A']>0)
{
number[4]=alphabet['U'-'A'];
alphabet['F'-'A']-=number[4];
alphabet['O'-'A']-=number[4];
alphabet['U'-'A']-=number[4];
alphabet['R'-'A']-=number[4];
}
if(alphabet['X'-'A']>0)
{
number[6]=alphabet['X'-'A'];
alphabet['S'-'A']-=number[6];
alphabet['I'-'A']-=number[6];
alphabet['X'-'A']-=number[6];
}
if(alphabet['G'-'A']>0)
{
number[8]=alphabet['G'-'A'];
alphabet['E'-'A']-=number[8];
alphabet['I'-'A']-=number[8];
alphabet['G'-'A']-=number[8];
alphabet['H'-'A']-=number[8];
alphabet['T'-'A']-=number[8];
}
if(alphabet['T'-'A']>0)
{
number[3]=alphabet['T'-'A'];
alphabet['T'-'A']-=number[3];
alphabet['H'-'A']-=number[3];
alphabet['R'-'A']-=number[3];
alphabet['E'-'A']-=2*number[3];
}
if(alphabet['F'-'A']>0)
{
number[5]=alphabet['F'-'A'];
alphabet['F'-'A']-=number[5];
alphabet['I'-'A']-=number[5];
alphabet['V'-'A']-=number[5];
alphabet['E'-'A']-=number[5];
}
if(alphabet['S'-'A']>0)
{
number[7]=alphabet['S'-'A'];
alphabet['S'-'A']-=number[7];
alphabet['E'-'A']-=2*number[7];
alphabet['V'-'A']-=number[7];
alphabet['N'-'A']-=number[7];
}
if(alphabet['O'-'A']>0)
{
number[1]=alphabet['O'-'A'];
alphabet['O'-'A']-=number[1];
alphabet['N'-'A']-=number[1];
alphabet['E'-'A']-=number[1];
}
if(alphabet['I'-'A']>0)
{
number[9]=alphabet['I'-'A'];
alphabet['N'-'A']-=2*number[9];
alphabet['I'-'A']-=number[9];
alphabet['E'-'A']-=number[9];
}
printf("Case #%d: ", t);
for(int i=0;i<10;i++)
for(int j=0;j<number[i];j++)
printf("%d", i);
printf("\n");
}
return 0;
}
728x90
'백준 알고리즘' 카테고리의 다른 글
<백준 알고리즘> 10799번: 쇠막대기 (0) | 2023.02.04 |
---|---|
<백준 알고리즘> 14370번: 전화번호 수수께끼 (Large) (0) | 2023.02.03 |
<백준 알고리즘> 3584번: 가장 가까운 공통 조상 (0) | 2023.02.02 |
<백준 알고리즘> 1749번: 점수따먹기 (0) | 2023.02.02 |
<백준 알고리즘> 3020번: 개똥벌레 (0) | 2023.02.02 |