본문 바로가기

백준/C++

[BaeKJoon/C++] 백준 10384 c++ 팬그램

반응형

https://www.acmicpc.net/problem/10384

 

10384번: 팬그램

팬그램은 모든 알파벳을 적어도 한 번씩을 사용한 영어 문장을 말한다. 다음은 유명한 팬그램 중 하나이다. The quick brown fox jumps over a lazy dog 더블 팬그램은 모든 알파벳을 적어도 두 번씩은 사용

www.acmicpc.net

문제

팬그램은 모든 알파벳을 적어도 한 번씩을 사용한 영어 문장을 말한다.

더블 팬그램은 모든 알파벳을 적어도 두 번씩은 사용한 문장을 말하고,

트리플 팬그램은 모든 알파벳을 적어도 세 번씩은 사용한 문장을 말한다.

입력

입력은 여러 줄의 테스트 케이스들로 이루어진다.

첫째 줄에 테스트케이스의 수 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
반응형