백준/백준 단계별 문제풀이

백준 1316번 (C++)

FDEE 2020. 8. 23. 12:12

www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때�

www.acmicpc.net

 

<답안>

#include <iostream>

using namespace std;

int main() {

    int n;

    int count[26] = {0};

    string input;

    int index;

    bool result = true;

    int countResult = 0;

    

    cin>>n;

    for(int j=0; j<n; j++)

    {

        cin>>input;

        for(int i=0; i<input.size(); i++)

        {

            index = (int)input.at(i)-97;

            if(count[index] == 0)

                count[index]++;

            else

            {

                if(index == (int)input.at(i-1)-97)

                    count[index]++; //그냥 개수 남기는 느낌으로, 의미없는 문장

                else

                {

                    result = false;

                    break;

                }

            }

        }

        

        if(result)

            countResult++;

        for(int i=0; i<26; i++)

            count[i] = 0;

        result = true;

    }

    cout<<countResult;

    

    return 0;

}

 

<설명>

알파벳이 26개 이므로 각 문자의 개수를 저장할 배열 count[26]을 0으로 초기화 한다

n을 입력받아 인덱스 j를 통해 n번 반복한다

string 형태의 input으로 입력받아 저장한 뒤

인덱스 i=0 부터 size()-1까지 증가시키면서

index에 알파벳 -> 숫자로 변환한 값을 저장한다 (a -> 0 ~ z -> 25)

 

만약 count[index] 값이 0인 경우는 해당문자의 첫입력이므로 count를 증가시킨다

그외의 경우 두번째 이후의 입력이므로 비교가 필요하다

   그전의 문자와 동일한 경우 (index == (int)input.at(i-1)-97 )

      정상적인 상황이다 //그래서 그냥 count를 증가시켰다

   그 외의 경우는 그룹단어가 아니기 때문에

      문장이 그룹단어인지 여부를 저장한 result 값을 false로 바꾼 뒤 반복문을 벗어난다

 

각 문자 비교가 끝난 후 result 값이 정상인 true인 경우 그룹단어문장 개수인 countResult를 증가시킨다

다음번 문장 비교를 위해 배열 count를 0으로 초기화, 그룹단어여부 result를 true로 초기화 한다음 다음번 문장을 입력받는다

 

최종적으로 countResult를 출력한다

 

'백준 > 백준 단계별 문제풀이' 카테고리의 다른 글

백준 2839번 (C++)  (0) 2020.08.23
백준 1712번 (C++)  (0) 2020.08.23
백준 2941번 (C++)  (0) 2020.08.23
백준 5622번 (C++)  (0) 2020.08.22
백준 2908번 (C++)  (0) 2020.08.22