반응형
https://www.acmicpc.net/problem/10384
문제
팬그램은 모든 알파벳을 적어도 한 번씩을 사용한 영어 문장을 말한다.
더블 팬그램은 모든 알파벳을 적어도 두 번씩은 사용한 문장을 말하고,
트리플 팬그램은 모든 알파벳을 적어도 세 번씩은 사용한 문장을 말한다.
입력
입력은 여러 줄의 테스트 케이스들로 이루어진다.
첫째 줄에 테스트케이스의 수 n이 주어진다.
각 테스트케이스는 영어 소문자와 대문자, 특수기호들로 이루어진다.
출력
각 케이스마다 한 줄에 하나씩 다음 중 하나를 출력한다.
- 팬그램이 아닐 경우 - Not a pangram
- 팬그램일 경우 - Pangram!
- 더블 팬그램일 경우 - Double pangram!!
- 트리플 팬그램일 경우 - Triple pangram!!!
트리플 팬그램일 경우에는 자연스럽게 팬그램과 더블 팬그램이 되지만, Triple pangram!!! 만을 출력한다. 더블 팬그램도 마찬가지이다.
예제 입력 1 | 예제 출력 1 |
3 The quick brown fox jumps over a lazy dog. The quick brown fox jumps over a laconic dog. abcdefghijklmNOPQRSTUVWXYZ-zyxwvutsrqpon 2013/2014 MLKJIHGFEDCBA |
Case 1: Pangram! Case 2: Not a pangram Case 3: Double pangram!! |
풀이
1. transform으로 입력받은 문자열을 다 소문자로 바꾼다.
2. cnt = 팬그램, cnt2 = 더블 팬그램, cnt3 = 트리플 팬그램
코드
#include <iostream>
#include <string>
#include <algorithm> // transform
using namespace std;
int main() {
int test;
cin>>test;
cin.ignore();
for(int i=1; i<=test; i++){
string str;
getline(cin, str);
// 풀이 1번
transform(str.begin(), str.end(), str.begin(), :: tolower);
int arr[26]={0};
int cnt=0;
int len = str.length();
for(int i=0; i<len; i++){
// 각 문자의 아스키코드값에서 -97을 해줌으로써
// arr[26]의 배열의 위치와 똑같게 해준다.
// ex) a == arr[0], b == arr[1] ... z == arr[25]
cnt= str[i]-97;
arr[cnt]++;
}
// 풀이 2번
int cnt1=0;
int cnt2=0;
int cnt3=0;
for(int i=0; i<26; i++){
if(arr[i]!=0){
cnt1++;
}
if(arr[i]==2){
cnt2++;
}
if(arr[i]>=3){
cnt3++;
}
}
if(cnt3==26){
cout<<"Case "<<i<<": "<<"Triple pangram!!!\n";
}
else if(cnt2==26||cnt2+cnt3==26){
cout<<"Case "<<i<<": "<<"Double pangram!!\n";
}
else if(cnt1==26){
cout<<"Case "<<i<<": "<<"Pangram!\n";
}
else{
cout<<"Case "<<i<<": "<<"Not a pangram\n";
}
}
}
|
cs |
반응형
'백준 > C++' 카테고리의 다른 글
[BaeKJoon/C++] 백준 2153 c++ 소수 단어 (0) | 2022.03.07 |
---|---|
[BaeKJoon/C++] 백준 2902 c++ KMP는 왜 KMP일까? (0) | 2022.03.05 |
[BaeKJoon/C++] 백준 1453 c++ 피시방 알바 (0) | 2022.03.04 |
[BaeKJoon/C++] 백준 1871 c++ 좋은 자동차 번호판 (0) | 2022.03.03 |
[BaeKJoon/C++] 백준 10988 c++ 팰린드롬인지 확인하기 (0) | 2022.03.02 |