백준/문자열
백준 1316 c++ "그룹 단어 체커" -PlusUltraCode-
PlusUltraCode
2025. 3. 20. 21:39
https://www.acmicpc.net/problem/1316
[필자 사고]
처음에 str.find를 이용하여 풀가도 생각했지만
부르스트 알고리즘을 적용하여 O(n2)으로 문제를 해결했다.
간단한 문자열 문제라서 프로그래밍적 사고를 키우는데 좋은 문제였다.
[코드 해설]
1. 입력 처리 (Input 함수)
- 먼저 N을 입력받는다. 이는 주어진 단어의 개수이다.
- N개의 단어를 입력받아 vector<string> arr에 저장한다.
2. 그룹 단어 판별 (checkGroupWords 함수)
- 주어진 문자열이 그룹 단어인지 검사하는 함수이다.
- 문자열을 처음부터 끝까지 순차적으로 확인하며, 같은 문자가 연속해서 나타나는지 확인한다.
- 특정 문자가 등장한 이후에 다른 문자가 나타났다가 다시 해당 문자가 나오면 그룹 단어가 아니므로 1을 반환한다.
- 모든 검사를 통과하면 그룹 단어이므로 0을 반환한다.
3. 그룹 단어 개수 계산 (Game_Start 함수)
- checkGroupWords 함수를 이용해 그룹 단어가 아닌 단어의 개수를 구한다.
- 총 단어 개수에서 그룹 단어가 아닌 단어 개수를 빼서 그룹 단어의 개수를 출력한다.
[소스 코드]
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
using namespace std;
int N;
vector<string> arr;
void Input() {
cin >> N;
for (int i = 0; i < N; i++) {
string str;
cin >> str;
arr.push_back(str);
}
}
int checkGroupWords(string str) {
for (int i = 0; i < str.size(); i++) {
bool flag = false;
for (int k = i + 1; k < str.size(); k++) {
if (str[i] == str[k]) {
if (flag == true) {
return 1;
}
continue;
}
else {
flag = true;
}
}
}
return 0;
}
void Game_Start() {
int resultCount = 0;
for (int i = 0; i < N; i++) {
resultCount += checkGroupWords(arr[i]);
}
cout << N-resultCount;
}
int main(void) {
Input();
Game_Start();
}