본문 바로가기

백준/C++

[BaeKJoon/C++] 백준 11091 c++ 알파벳 전부 쓰기

반응형

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

 

11091번: 알파벳 전부 쓰기

팬그램은 26개의 알파벳, a~z를 최소 한번씩 모두 사용한 문장을 말한다. 아마 가장 유명한 문장은 이것일 것이다. "The quick brown fox jumps over the lazy dog." 꿍은 다른 문장들중에 팬그램인 것은 없는지

www.acmicpc.net

 

문제

팬그램은 26개의 알파벳, a~z를 최소 한 번씩 모두 사용한 문장을 말한다. 아마 가장 유명한 문장은 이것일 것이다. "The quick brown fox jumps over the lazy dog."

꿈은 다른 문장들 중에 팬그램인 것은 없는지 궁금해졌다. 그래서 여러분이 할 일은 꿈을 위해 어떠한 문장이 팬그램인지 아닌지를 판별해주는 프로그램을 짜는 것이다.

팬그램에서는 알파벳의 대소문자를 구분하지 않는다고 하자.

입력

입력의 첫 번째 줄은 1 ≤ N ≤ 50의 N이 주어진다.

다음 N개의 줄은 각각 한 문장이 주어지는데, 알파벳의 대소문자, 공백, 숫자, 그리고 분장 부호들(. ,?! ' ")이 포함될 수 있다.

각 문장은 최소 한개의 문자를 포함하며 100개를 넘지는 않는다.

출력

각 입력에 대해, 팬그램에 해당하면 "pangram"을 출력한다.

만약 팬그램이 아닐 경우, "missing"을 출력한 후 한 칸 띄고 문장에 나타나지 않은 문자들을 모두 출력한다. 이때, 나타나지 않은 문자들은 모두 소문자로 출력하며 알파벳 순서대로 정렬된 상태로 출력해야 한다.

예제 입력 1 복사

3
The quick brown fox jumps over the lazy dog.
ZYXW, vu TSR Ponm lkj ihgfd CBA.
.,?!'" 92384 abcde FGHIJ

예제 출력 1 복사

pangram
missing eq
missing klmnopqrstuvwxyz

 

풀이

1. 입력받은 문자열을 모두 소문자로 바꾼다. --- transform 

2. 문자열길이만큼 for문으로 돌려 각 문자-97를 해준 뒤, 배열에 넣는다.

 

코드

#include <iostream>
#include <string>
#include <algorithm> // transform
 
using namespace std;
 
int main() {
 
    int test;
    cin>>test;
    cin.ignore();
 
    for(int i=0; i<test; i++){
 
        string str;
        getline(cin, str);
 
        // 문자열을 모두 소문자로 변환
        transform(str.begin(), str.end(), str.begin(), ::towlower);
 
        int arr[26]={0};
        int cnt=0;
        int len = str.length();
 
        for(int i=0; i<len; i++){
            cnt=str[i]-97;  // 아스키코드 a=97~z=122
            arr[cnt]++;     
        }
        
        int cnt1=0;
 
        for(int i=0; i<26; i++){
            if(arr[i]!=0){  // 각 배열에 쓴문자가 있으면
                cnt1++;     // 카운트
            }
        }
 
        if(cnt1==26){       // 문자를 모두 썼으면,
            cout<<"pangram\n";
        }
        else{
            cout<<"missing ";
            for(int i=0; i<26; i++){
            if(arr[i]==0){
                cout<<char(i+97);   // 다시 문자형으로 바꿔준다.
            }
        }
        cout<<"\n";
        }
    }
 
    return 0;
}
cs

 

이 문제를 풀면서 알게 된게 transform이라는 함수를 알면 엄청 편하다는 것을 느꼈다.

반응형