백준 Baekjoon 1316 그룹 단어 체커 풀이
사용언어
Visual studio 2019 C++
문제 간단요약
이 문제는 각 문자가 연속으로 나오지 않는 이상 또 나오면 그룹단어가 아니다!!!!
이 사실을 알게되면 문제는 간단해진다
생각하기
bool형 visited 배열을 만들어서 각 문자열의 방문을 체크한다.
[1316 풀이]
#include <iostream>
#include <vector>
#include <cstring> // memset사용
using namespace std;
bool visited[26];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
vector<string> v;
cin >> N;
int n = N;
int cnt = 0; // 그룹문자가 아닌 문자 개수
for (int i = 0; i < N; i++) {
string s; cin >> s;
v.push_back(s);
}
while (N) {
N--;
memset(visited, false, sizeof(visited)); // visited는 단어마다 초기화 해줘야한다!
char c = v[N][0]; // 첫번째 단어를 미리 넣어놓는다
for (int i = 1; i < v[N].size(); i++) {
if (c == v[N][i]) // 그 전단어와 현재 단어가 같으면 넘어간다
continue;
else if (!visited[c - 'a']) {
visited[c - 'a'] = true;
c = v[N][i];
} // 같지않다면 true로 만들고 다음단어를 c에 넣는다
else {
cnt++;
break;
} // 같지도 않고 방문했다면 그룹문자가 아니다
if (visited[c - 'a']) {
cnt++;
break;
}
}
}
cout << n - cnt << "\n";
}
간단히 문제가 해결된다 !
Comments