[C++] 백준 1316 : 그룹 단어 체커

Kim Nahyeong·2022년 1월 10일
0

백준

목록 보기
52/157

#include <iostream>
using namespace std;

int N;
string str;
int alphabet[26] = {0};
int cnt = 0, idx = 99999;

int main(int argc, char **argv){
    scanf("%d", &N);

    for(int i = 0; i < N; i++){
        cin >> str;
        char c;
        for(int i = 0; i < str.size(); i++){
            c = str[i];
            if(idx != c - 97 && alphabet[c - 97] != 0){ // 이전 인덱스
                break;
            }
            idx = c - 97; // 현재 인덱스
            alphabet[idx]++;
            if(i == (str.size() - 1)){
                cnt++;
            }
        }
        for(int i = 0; i < 26; i++){
            alphabet[i] = 0; // 초기화
        }
    }

    printf("%d\n", cnt);

    return 0;
}

코드를 너무 어렵게 짠 것 같다. 내가 짠 경우에는 해당 문자가 불려온 적이 있는지를 체크하고, 만약 이전의 인덱스와 지금의 인덱스를 비교하고 만약 서로 이어지지 않고(인덱스가 다름) 이미 불려진 적이 있다면(알파벳 배열 수 0 아님) 그룹단어가 아니라고 보았다.

근데 이것은 매우 비효율적이다. 다른 분들의 코드를 보면 바로 앞의 문자와 다르고 이전과 같은 문자가 나온적이 있으면(배열 이용) 그룹단어가 아니라고 보았다.

0개의 댓글