less than 1 minute read

사용언어

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";
}

간단히 문제가 해결된다 !

Categories:

Updated:

Comments