PS/BOJ

[백준 BOJ] 1316 그룹 단어 체커

Jubil 2019. 8. 12. 19:52
반응형

링크

https://www.acmicpc.net/problem/1316

 

풀이

 

같은 문자가 한 단어 내에서 떨어져서 존재하면 안 됩니다.

쭉 훑으면서 이미 나왔던 문자인지 체크하는 배열을 만들어 줍니다.

그 배열을 arr이라고 한다면

!arr[now] || now == before

일 때는 문제가 없겠죠?

 

arr[now]++;
before = now;

그럼 이렇게 처리해주시면 됩니다.

 

하지만 거짓이 나왔다면 반복문을 빠져나오고 count를 하지 않으면 됩니다.

 

 

 

코드

//1316_그룹 단어 체커
#include <iostream>
#include <string>
#include <string.h>
using namespace std;

int n, flag, cnt, arr['z'+1];
string str;
char before;

int main() {
	scanf("%d\n", &n);
	
	while (n--) {
		flag = 1;
		memset(arr, 0, sizeof(arr));	//초기화

		getline(cin, str);

		for (int i = 0; i < str.length(); ++i) {	//길이만큼 반복
			char now = str.at(i);			//현재 가리키는 문자 가져옴
			if (!arr[now] || now == before) {	//예전에 가리키지 않았거나 이전 문자랑 같을 때(연속으로 나타날 때)
				arr[now]++;			//가리킨 문자 체크
				before = now;			//이전 문자에 현재 문자 넣어줌
			}
			else {					//예전에 가리킨 문자 또 가리킬 때
				flag = 0;			//flag 0 -> 그룹 단어 아님
				break;
			}
		}

		if (flag) cnt++;				//그룹 단어면 count
	}

	cout << cnt << endl;

	return 0;
}

반응형

'PS > BOJ' 카테고리의 다른 글

[백준 BOJ] 5598 카이사르 암호  (0) 2019.08.12
[백준 BOJ] 2231 분해합  (0) 2019.08.12
[백준 BOJ] 3052 나머지  (0) 2019.08.12
[백준 BOJ] 10757 큰 수 A+B  (0) 2019.08.12
[백준 BOJ] 14490 백대열  (0) 2019.08.11