백준 심화1 그룹단어 체크 c++ 풀이
풀이
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
문자열=아스키코드
알파벳 소문자 a부터 소문자 z까지 크기가 26인 배열을 만든다음 0으로 초기화
벡터에 반복하여 저장한 입력 문자열의 각 문자에 접근한 값에서 97을 빼준다음
그 위치에 해당하는 알파벳의 값을 1 증가시켜줌
이때 문자열 aab인 경우 예외가 되므로 이전 문자와 현재 문자가 다른 경우에만 배열 값을 증가시킴
배열 값이 1을 초과하는 경우, 이전에 나온 문자가 한번 더 나와 그룹단어가 아니게 되므로 세지않음
사용 변수 용도 설명
cnt : 문자열 반복해서 입력받을 횟수
ans : 그룹 단어 확인 후 출력할 갯수 (정답)
vector<string> : 반복해서 입력받은 문자열 저장하는 벡터
int arr[] : 알파벳 중복 횟수 확인용
isGroupWord : 그룹 단어가 아닌 경우 구분 용도
#include<bits/stdc++.h>
using namespace std;
int main()
{
int cnt = 0;
cin >> cnt;
int ans = 0;
vector<string> str;
bool isGroupWord = true;
for(int i=0; i<cnt; i++){
string s = "";
cin >> s;
str.push_back(s);
}
for(int i=0; i<str.size(); i++){
int arr[26] = {0,};
string s = str[i];
for(int j=0; j<s.length(); j++){
if(s.length() == 1){
cout << "글자 수 한 개일 때 : " << s << "\n";
break;
}
if(s[j] != s[j-1]){
cout << "현재 문자 : " << s[j] << ", 이전 글자 : " <<s[j-1] <<"\n";
arr[s[j]-97]++;
if(arr[s[j]-97] > 1) {
cout <<"중복된 글자 : " <<s[j] <<"\n";
isGroupWord = false;
break;
}
}
}
cout <<"문자 하나 체크 완료, ans 값 : "<< ans<< "\n";
if(isGroupWord) {
cout << "isGroupWord true 이므로 ans 증가 \n";
ans++;
}
isGroupWord = true; //값 초기화
}
cout << ans;
return 0;
}