반응형
링크
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 |