<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[백준 1316] 그룹 단어 체커

BlockDMask 2017. 9. 21. 17:28
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 9월 21일 목요일 문제 풀어보겠습니다. 

0. 제목

  • 백준 1316 그룹 단어 체커

  • BOJ 1316 그룹 단어 체커

  • Group Word Checker

1. 문제 설명


그룹 단어란 단어(문자열)에 존재하는 모든 문자에 대해서, 


각 문자가 연속해서 나타나는 경우를 말합니다.


"jjjkkqq" 는 j, k, q가 모두 연속해서 나타나므로 그룹 단어 입니다.

 

"bear" 는 b, e, a, r 이 모두 연속해서 나타나므로 그룹 단어 입니다.


"blockdmask" 는 b, l, o ,c k, d , m, a, s, k 에서 k 가 연속해서 나타나지 않으므로 그룹단어가 아닙니다.


"kkkjjjjmmmj"  는 j 가 연속해서 나타나지 않으므로 그룹단어가 아닙니다.



Testcase 가 N으로 입력이 들어옵니다


N은 100 보다 작거나 같은 자연수 입니다.


입력 되는 단어는 알파벳 소문자로만 구성되어있고, 길이는 최대 100입니다.


2. 풀이 과정


연속된 알파벳이 이전에 왔는지 체크 하기 위해서


알파벳의 개수 26개 만큼의 배열을


 bool 타입의 자료형으로 선언 및 false로 초기화 했습니다.


알파벳에 해당하는 위치를 

a는 index =0

b는 index =1

.

.

.

y 는 index = 24

z 는 index = 25


에 매칭됩니다.



string 타입으로 받은 문자열을 하나씩 탐색합니다.


문자가 오면 배열 값을 확인하고 


배열 값이 true 라면 이전에 왔기 때문에 그룹단어가 아닙니다.


배열 값이 false 라면 처음 오는 문자이기 때문에 

배열값을 true 로 바꾸어주고

현재 문자와 다른 문자가 올 때 까지 문자열을 탐색해줍니다.


3. 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//백준 1316 그룹 단어 체커
 
#include<iostream>
 
using namespace std;
 
bool wordCheck(string str){
    bool alpabet[26= {false}; //알파벳 개수 만큼 배열을 만듭니다
                                //알파벳에 해당하는 위치를 index 0~25에 맞게 할당하기 위해
 
    for(int i=0; i<str.length(); i++){
 
        if(alpabet[str[i]-'a']){ //true 이면 이미 있었으므로 false
            return false;
 
        }else{                   //false 이면 처음 오는 알파벳 이므로 check
 
            char tmp = str[i];
            alpabet[str[i]-'a'= true//알파벳이 왔으면 true로 바꿔줍니다
 
            while(1){
                if(tmp != str[++i]){    //현재 알파벳과 다른 알파벳이 올때까지 탐색합니다
                    i--;
                    break;
                }
            }
 
        }
 
    }
    return true;
}
 
 
 
int main(void){
 
    int n;
    cin >> n;
 
    int count =0;
 
    for(int i=0; i<n; i++){
        string str;
        cin >> str;
 
        if(wordCheck(str)){
            count++;
        }
 
    }
    cout << count;
 
    return 0;
}
cs


4. 인증


문제출처 - https://www.acmicpc.net/problem/1316

감사합니다. 도움이 되었다면 하트 한번 꾹 눌러주세요!

반응형