[백준/C++] 1316번 그룹 단어 체커

1 분 소요

1.문제 링크

1316번 그룹 단어 체커



2. 풀이 전 계획과 생각

  • 구현하기



3. 풀이

#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main() {
    int n; cin >> n;

    int cnt = 0; // 그룹단어 개수 
    for (int i = 0; i < n; i++) {
        bool gw = true; // 그룹단어일 경우 true, 아닐 경우 false
        string str; cin >> str;

        vector<char> v; // 그동안 나온 알파벳을 저장할 벡터
        char prestr = '.'; // 이전에 나온 문자

        for (int i = 0; i < str.size(); i++) { // 문자열 길이만큼 for문 돌면서 체크
            bool check = false; // 이전에 체크한 문자와 다른 문자가 나왔을 때 이전에 나온 문자라면 true
            if (prestr != str[i]) { // 바로 이전에 체크한 문자와 다른 문자가 나왔다면
                for (int j = 0; j < v.size(); j++) {
                    if (v[j] == str[i]) { // 이미 체크된 문자라면
                        check = true; 
                        gw = false;
                        break;
                    }
                }
                if (check == true) {
                    break;
                }
                else {
                    v.push_back(str[i]);
                }

            }
            prestr = str[i];
        }
        if (gw == true) cnt++; // 그룹단어일 경우 cnt 변수 1 증가
    }

    // 답 출력
    cout << cnt;
}



4. 풀이하면서 고민했던 점

  • 이미 체크된 문자를 어떤식으로 저장해 확인할지 고민함. 벡터를 이용해 새로운 문자가 나올때마다 push_back을 해줬다. 그리고 체크할 때는 벡터의 크기만큼을 순회하면서 체크했다.



5. 문제를 풀고 알게된 개념 및 소감

  • char prestr=’’; 를 했는데 오류가 발생했다.

  • string을 인덱스로 접근할 때 비교하는 문자 변수는 string으로는 못하고 char변수로만 가능했다.