문제
팬그램은 모든 알파벳을 적어도 한 번씩을 사용한 영어 문장을 말한다.
다음은 유명한 팬그램 중 하나이다.
The quick brown fox jumps over a lazy dog
더블 팬그램은 모든 알파벳을 적어도 두 번씩은 사용한 문장을 말하고,
트리플 팬그램은 모든 알파벳을 적어도 세 번씩은 사용한 문장을 말한다.
더 이어나갈 수도 있겠지만 시간상 여기까지만 하도록 하겠다.
입력
입력은 여러 줄의 테스트케이스들로 이루어진다.
첫째 줄에 테스트케이스의 수 n이 주어진다.
각 테스트케이스는 영어 소문자와 대문자, 특수기호들로 이루어진다.
출력
각 케이스마다 한 줄에 하나씩 다음 중 하나를 출력한다.
- 팬그램이 아닐 경우 - Not a pangram
- 팬그램일 경우 - Pangram!
- 더블 팬그램일 경우 - Double pangram!!
- 트리플 팬그램일 경우 - Triple pangram!!!
트리플 팬그램일 경우에는 자연스럽게 팬그램과 더블 팬그램이 되지만, Triple pangram!!!만을 출력한다. 더블 팬그램도 마찬가지이다.
Solved.ac 레벨
실버 V
풀이
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n; //테스트 케이스
cin.ignore();
for(int i = 1; i <= n; i++){
string str;
getline(cin, str);
transform(str.begin(), str.end(), str.begin(), ::tolower);
int alphabet[26] = {0,};
for(int j = 0; j < str.length(); j++){
alphabet[str[j] - 97]++;
}
int cnt[3] = {0,}; //[0] : 팬그램 [1] : 더블 팬그램 [2] : 트리플 팬그램
for(int j = 0; j < 26; j++){
if(alphabet[j] != 0){
cnt[0]++;
}
if(alphabet[j] == 2){
cnt[1]++;
}
if(alphabet[j] >= 3){
cnt[2]++;
}
}
if(cnt[2] == 26){
cout << "Case " << i << ": " << "Triple pangram!!!\n";
} else if(cnt[1]==26 || cnt[1] + cnt[2] == 26){
cout << "Case " << i << ": " << "Double pangram!!\n";
} else if(cnt[0] == 26){
cout << "Case " << i << ": " << "Pangram!\n";
} else {
cout << "Case " << i << ": " << "Not a pangram\n";
}
}
return 0;
}
참고
'Study (etc) > Problem Solving' 카테고리의 다른 글
[BOJ / C++] 13717번 : 포켓몬 GO (0) | 2022.12.07 |
---|---|
[BOJ / C++] 10699번 : 오늘 날짜 (0) | 2022.12.03 |
[BOJ / C++] 25594번 : HG 음성기호 (1) | 2022.12.01 |
[BOJ / C++] 26082번 : WARBOY (0) | 2022.11.30 |
[BOJ / C++] 25592번 : 바둑돌 게임 (0) | 2022.11.30 |