www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때�

www.acmicpc.net

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

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

  int num = 0;
  for(int i = 0 ; i < n ; i++)
  {
    string s;
    cin >> s;
    // 그룹단어인지 판별 여부
    bool pos = true;
    // 문자열 각 문자별로 한번 쭉 돌건데
    for(int j = 0 ; j < s.size() ; j++)
    {
      // 이번 단어가 가장 마지막으로 나온 위치
      int last = j;
      // 나머지 문자열 중에 해당 단어가 또 나오는지 쭉 확인
      for(int k = j + 1 ; k < s.size() ; k++)
      {
        // 만약 같은 단어가 나왔는데
        if(s[j] == s[k])
        {
          // 현재 위치와 last 위치 차이가 1일경우 연속되었다는 뜻
          if(k - last == 1)
          {
            // 다음 문자열 검사때는 안해도되니 j 에 k 를 넣어주고
            j = k;
            // 마지막 위치도 변경
            last = k;
          }
          // 연속되지 않았을 경우
          else
          {
            // 그룹단어가 아님
            pos = false;
            break;
          }
        }
      }
      // 만약 그룹단어가 아니면 검사 그만
      if(pos == false) continue;
    }
    // 그룹단어일 경우 1 증가
    if(pos) num++;
  }

  cout << num << endl;
}

 

[Try]

1. 문자열을 한번 쭉 돌면서 각 문자가 연속되지 않은게 있을 경우 거짓으로 판정해주는 방식

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

[백준] 5585.cpp : 거스름돈  (0) 2020.06.16
[백준] 2309.cpp : 일곱 난쟁이  (0) 2020.06.15
[백준] 2748.cpp : 피보나치 수 2  (0) 2020.06.12
[백준] 1094.cpp : 막대기  (0) 2020.06.12
[백준] 2941.cpp : 크로아티아 알파벳  (0) 2020.06.11

+ Recent posts