반응형
https://www.acmicpc.net/problem/1316
떠올린 방법은 정렬하지 않고 일단 unique 함수를 사용해서 연속되는 수를 제거한다.
(unique, erase를 잘 모른다면 https://hagisilecoding.tistory.com/53 여기서 공부하고 오면 편함)
aabbbccb가있다면 unique함수를 정렬을 하고 써주면 연속되는 값이 쓰레기 값으로 가고 이것을 erase를 통해 지워주면 abcb가된다. 그 후 이것을 sort해주면 abbc이렇게되는데 사실 그룹이 이루어져있으면 sort를 했을 때 중복이 일어날 수 없다. 왜냐하면 그룹이 이루어져있으면 중복되는 값은 없어져야하기 때문이다. 그래서 unique erase sort를 사용한 후 문자열을 확인하면서 중복되는 값이 있다면 그룹에서 제외시키면 된다.
단계별풀이
1.string 선언
2. 입력 받은 문자열을 unique를 통해 연속된 중복값을 뒤로 보내주고 erase로 쓰레기값 제거
3. sort를 이용해서 문자열 정렬
4. 정렬된 문자열을 한개씩 확인하는데 다음 문자열과 같으면 false
5. true이면 그룹이고 false이면 그룹제외
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
int n;
cin >> n;
string word;
int ans = 0;
for (int i = 0; i < n; i++){
bool isgroup = true; // 그룹인지 확인하는 변수
cin >> word;
word.erase(unique(word.begin(), word.end()), word.end());
//연속된 중복값 맨 뒤로 보내서 제거
sort(word.begin(), word.end()); // 정렬
for (int k = 0; k < word.length()-1;k++){
if(word[k] == word[k+1]){//중복된값이 있으면
isgroup = false; //그룹이 아님
break;
}
}
if(isgroup){
ans++;
}
}
cout << ans;
return 0;
} // 11min
|
cs |
체감난이도 | 걸린시간 | 참고 | 사용 알고리즘, 문법 |
하 | 11min | x | erase, unique |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 11726 2×n 타일링 c++ [컴공과고씨] (0) | 2022.04.06 |
---|---|
백준 9095 1, 2, 3 더하기 c++ [컴공과고씨] (0) | 2022.04.06 |
백준 11720 숫자의 합 c++ [컴공과고씨] (0) | 2022.04.05 |
백준 7662 이중 우선순위 큐 c++ [컴공과고씨] (0) | 2022.04.05 |
백준 11279 최대 힙 c++ [컴공과고씨] (2) | 2022.04.03 |