[C++] 백준 1316 : 그룹 단어 체커
#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 아님) 그룹단어가 아니라고 보았다.
근데 이것은 매우 비효율적이다. 다른 분들의 코드를 보면 바로 앞의 문자와 다르고 이전과 같은 문자가 나온적이 있으면(배열 이용) 그룹단어가 아니라고 보았다.
Author And Source
이 문제에 관하여([C++] 백준 1316 : 그룹 단어 체커), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/C-백준-1316-그룹-단어-체커저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)