728x90
https://www.acmicpc.net/problem/14425
14425번: 문자열 집합
첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어
www.acmicpc.net
집합 안에 해당 문자열이 있는지 확인하는 문제. set을 사용하는데 set은 값을 집어넣으면 자동 정렬하기 때문에 시간이 좀 더 걸린다.
그래서 unordered_set을 사용하면 시간이 덜 걸린다. unordered_set을 사용하자!
그런데 안에 값이 있는지 없는지 확인할 때 사용할 수 있는 방법이 좀 있다.
- count(원소): 원소의 개수 세기
- find(원소): 원소가 있는지 없는지 체크 -> == set.end()라면 없는 것
궁금하다. 누가 더 빠를지... 둘 다 해보자!^^
#include <iostream>
#include <algorithm>
#include <string>
#include <unordered_set>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, m, cnt=0;
cin >> n >> m;
unordered_set<string> se;
for(int i=0; i<n; i++){
string s;
cin >> s;
se.insert(s);
}
for(int i=0; i<m; i++){
string s;
cin >> s;
if(se.count(s) != 0) cnt++;
//or
//if(se.find(s) != se.end()) cnt++;
}
cout << cnt << '\n';
return 0;
}
1행이 count 함수
2행이 find 함수
이렇게 보면 count 함수가 더 빠른 거 같은데
unordered_set이 아닌 set으로도 해봤다.
1행이 find 함수
2행이 count 함수
띠용? find 함수가 더 빠르게 됐네... 입력값이 다른 건지 unordered_set이랑 set이 다른 건지 흠냐링
나중에 공부해서 포스팅해봐야겠다~
어쨌든 확실히 unordered_set이 set보다 더 빠르다 (당연,, 정렬을 안 하니까~)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++/swift] 19941번: 햄버거 분배 (0) | 2022.11.03 |
---|---|
[백준/c++/swift] 10448번: 유레카 이론 (0) | 2022.11.03 |
[백준/c++] 1935번: 후위 표기식2 (1) | 2022.09.30 |
[백준/c++] 22233번: 가희와 키워드 (0) | 2022.09.22 |
[백준/c++] 2531번: 회전 초밥 (0) | 2022.09.22 |