본문 바로가기

Problem Solving/백준

[백준/C++] 1331번 그룹 단어 체커


#include <bits/stdc++.h>
using namespace std;


int main() {
    int N;
    cin >> N;
    int answer = 0;

    for(int i = 0; i < N; i++) {
        vector<int> arr(27,0);
        string str;
        cin >> str;
        int idx = 1, j = 0;
        if(str.empty()) continue;
        else arr[str[0] % 26]++;
        for(j = 1; j < str.length(); j++) {
            if(str[j] != str[j-1]) idx = 0;
            if(arr[str[j] % 26] != idx) break;
            else { arr[str[j] % 26]++; idx++;}
        }
        if(j == str.length()) answer++;
    }

    cout << answer;
}

배열을 알파벳 갯수+1개 만큼 만든다음 각 알파벳이 들어올 때마다 % 26한 배열로 넣는다. ( 알파벳마다 아스키 코드값이 있을테고 전체 알파벳 갯수로 나누면 각 알파벳마다 1개의 배열에 들어가게 되므로 이렇게 구현하였다!)

 

그렇게 하며 같은 알파벳이 연속해서 들어오면 idx(index)값이 배열과 같은 숫자 크기로 증가하게 되며 새로운 알파벳이 들어오면 idx가 0이 되도록하였다. 그래서 새로운 알파벳이 들어오는데 이미 기존에 있었던 알파벳이면 떨어져서 나왔다는 의미가 되니 break를 하도록 하였다.

 

그래서 끝까지 문자열을 훑은 것들만 숫자를 세서 출력해주었다.


문제: https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

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

www.acmicpc.net