백준 심화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;
}
'문제풀기' 카테고리의 다른 글
[백준/BOJ] 문자열 2908번 문제, 상수 C++ 풀이 (0) | 2022.10.20 |
---|---|
[백준/BOJ] 문자열 1152번 문제, 단어의 개수 C++ 풀이 (0) | 2022.10.19 |
[백준/BOJ] 문자열 1157번 문제, 단어 공부 C++ 풀이 (0) | 2022.10.06 |
[백준/BOJ] 문자열 2675번 문제, 문자열 반복 C++ 풀이 (1) | 2022.10.04 |
[ASCII] 아스키코드란, 참고하려고 기록해보는 아스키코드 표 (0) | 2021.12.27 |
[백준/BOJ] 출력 10171/10172번 문제, 개/고양이 C++ 풀이 (0) | 2021.12.13 |