ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1316 - 그룹 단어 체커
    백준 algorithm 2020. 6. 4. 01:37

    문제 설명

     

     

    => 단순한 구현 문제입니다. 

    => string을 사용하고 bool형 array를 사용하여 구현할 수 있습니다. 

     

     

    • 알파벳을 담을 bool형 array를 생성합니다. 

    • 현재의 단어의 글자를 탐색하며 처음 나온 알파벳인지, 나왔던 알파벳인지를 확인합니다.

    • 처음 나온 알파벳일 경우, 해당 알파벳을 방문했다고 표시해줍니다.

    • 처음 나온 알파벳이 아닐 경우, 이전 알파벳과 같은 알파벳인지, 같지 않은지 확인합니다.

    • 같지 않을 경우 그룹 단어에 해당이 안됩니다. 

    • 해당하는 경우에 okay라는 bool형 변수를 true로 바꿔주고, 해당 변수를 통해 단어의 개수를개수를 세는 cnt의 개수를 올릴지 말지 정합니다.

    • 모든 순서가 끝나면 방문하였던 알파벳 arr를 초기화시켜주고, okay 변수 또한 초기화 시켜줍니다. 

     

    => 저는 이와 같은 알고리즘으로 문제를 해결했습니다. 

     

     

     

     

     

    <code>

    #include <iostream>
    #include <algorithm>
    #include <string>
    
    int arr[10];
    
    using namespace std;
    
    bool alphabet[27];
    
    void reset()
    {
        for(int i=0; i<27; i++)
        {
            alphabet[i]=false;
        }
    }
    
    int main()
    {
        ios_base::sync_with_stdio(false);
        cin.tie(nullptr);
        cout.tie(nullptr);
        
        int N;
        cin >> N;
        
        string arr[101];
        string str;
        
        for(int i=0; i< N; i++)
        {
            cin >> str;
            arr[i] =  str;
        }
        
        int cnt =0;
        bool okay;
        for(int i=0; i<N; i++)
        {
            string tmp = arr[i];
            int len = tmp.length();
            
            for(int j=0; j<len; j++)
            {
                if(!alphabet[tmp[j]-97]) // 한번도 나오지 않은 경우
                {
                    alphabet[tmp[j]-97]=true; // 나온것 확인
                }
                else //나왔던 알파벳인 경우
                {
                    if(tmp[j] ==tmp[j-1] )//이전것이 연속인 경우
                    {
                        continue;
                    }
                    else//이전것과 다른 경우
                    {
                        okay = true; // 집합의 단어가 아님
                        break;
                    }
                }
            }
            if(okay != true) //적합한 단어라면
            {
                cnt++;
                okay =false;
            }
            reset();
            okay = false;
        }
        
        cout << cnt <<'\n';
        
        return 0;
    }
    

     

     

     

    실행 화면
    실행화면 2

     

     

     


    **훨씬 간단한 방법이 있을 것이라 생각되지만, 생각나는 대로 구현해본 코드입니다. 
    **질문 환영합니다. 

    '백준 algorithm' 카테고리의 다른 글

    백준 10973 - 이전 순열  (0) 2020.06.05
    백준 10972 - 다음 순열  (0) 2020.06.05
    백준 15651 - N과 M(3)  (0) 2020.06.03
    백준 15650 - N과 M(2)  (0) 2020.06.03
    백준 1748 - 수 이어 쓰기 1  (0) 2020.06.02

    댓글

Designed by Who.