백준 1316, 그룹 단어 체커 C++ 성공 코드

카테고리 없음

2019. 2. 5. 16:16

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, 그룹 단어 체커 - 문제 페이지 바로가기