단계별로 풀어보기 - 1316
https://www.acmicpc.net/problem/1316
풀이1 (내 풀이)
- 그룹단어수 이면, 이를 카운트하는 함수 : consider()
- 그룹단어인지 여부 판단 함수 : isGroupWord()
- isGroupWord() 함수 : happy -> hapy -> 버블정렬의 비교 부분을 적용해 중복된 문자 있는지 확인.
중복된 문자가 있으면 return false, 중복된 문자가 없으면 return true
#include <iostream>
#include <string>
#include <vector>
using namespace std;
/*
* 그룹 단어 : 한 단어열에서 특정 문자가 연속해서만 나타나야하는 단어
* vector 로 문자열을 n개 받고
* 그룹 단어 세어 결과값 반환하는 함수 -> consider
* 그룹 단어 여부 판단 함수 -> isGroupWord
*/
bool isGroupWord(string s)
{
vector<char> ch;
ch.push_back(s[0]);
for (int i = 1; i <= s.length() - 1; i++)
{
if (s[i] != s[i -1]) {
ch.push_back(s[i]);
}
}
//ch에서 중복된 문자 존재하면 return false, 아니면 return true
for (int i = 0; i < ch.size() - 1; i++)
{
for (int j = i+1; j < ch.size(); j++)
{
if (ch[i] == ch[j])
return false;
}
}
return true;
}
int consider(vector<string>& v) //그룹 단어 수 세는 함수
{
int count = 0;
string s;
for (int i = 0; i < v.size(); i++)
{
s = v[i];
if (isGroupWord(s))
count++;
}
return count;
}
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin >> n;
vector<string> v;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
v.push_back(s);
}
cout << consider(v);
return 0;
}
풀이2 (다른 사람)
- 이웃한 글자가 다르면 카운트 해주는 dif 와 특정 단어가 나오면 apbt[] = 1로 하여 1에 해당하는 것만 카운트한 cnt
- 값을 비교
- cnt == dif 이면 그룹단어, cnt < dif 이면 그룹 단어가 아님 ( ex. abbabc )
- 코드가 훨씬 간결하고, 두 값을 비교해서 간결하게 했다는 점이 좋았다.
#include <iostream>
#include <string>
using namespace std;
int main(){
int apbt[26] = {0,}, dif = 0,cnt = 0, sum = 0, N;
string word;
cin>>N;
for(int j = 0; j <N; j++){
cin>>word;
for(int i = 0; i<word.length(); i++){
apbt[word[i] - 'a'] = 1;
if(word[i] != word[i + 1]){
dif++;
}
}
for(int i = 0; i<26; i++){
if(apbt[i] == 1)
cnt++;
apbt[i] = 0;
}
if(cnt == dif)
sum++;
cnt = 0; dif = 0;
}
cout<<sum<<endl;
return 0;
}
'전공 > 알고리즘(algorithm)' 카테고리의 다른 글
[C++] 백준(BOJ) 10798 세로읽기 (0) | 2024.01.05 |
---|---|
[C++] 백준(BOJ) 25206 너의 평점은 (2) | 2024.01.05 |
[C++] 백준(BOJ) 2941 크로아티아 알파벳 (2) | 2024.01.04 |
[C++] 백준(BOJ) 1157 단어공부 (1) | 2024.01.04 |
[C++] 백준(BOJ) cin.tie(NULL) / ios_base::sync_with_stdio(false) / endl 대신 \n (1) | 2024.01.02 |