-
백준 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; }
**훨씬 간단한 방법이 있을 것이라 생각되지만, 생각나는 대로 구현해본 코드입니다.
**질문 환영합니다.반응형'백준 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 -