01. 문제 풀이 과정
01) 각 문자의 출현 여부 map<char, bool> 생성
02) 단어를 하나씩 입력받고 문자를 하나씩 검사
- index가 0보다 큰 문자에 대해, 이전에 등장한 적이 있고 등장한 위치가 바로 이전이 아니라면 그룹 단어가 아님
- 이전에 등장한 적이 없다면 문자의 출현 여부를 true로 셋팅
03) 단어가 변경될 때마다 map을 초기화
02. 코드
#include <bits/stdc++.h>
using namespace std;
void mapInit(map<char, bool>& m) {
for(char c='a'; c<='z'; ++c)
m[c] = false;
}
int main(void)
{
int N, accum = 0;
string s;
map<char, bool> m;
mapInit(m);
cin >> N;
while(N--) {
unsigned int i;
cin >> s;
for(i=0; i<s.length(); ++i) {
char prev;
if(i>0)
prev = s[i-1];
if(i>0 && m[s[i]] == true && prev != s[i])
break;
if(m[s[i]] == false)
m[s[i]] = true;
}
if(i == s.length())
++accum;
mapInit(m);
}
cout << accum;
return 0;
}
03. 참조
백준 1316, 그룹 단어 체커 - 문제 페이지 바로가기