반응형
문제는 다음과 같습니다.
https://www.acmicpc.net/problem/14425
14425번: 문자열 집합
첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어
www.acmicpc.net
풀이 코드는 다음과 같습니다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n,m;
cin>>n>>m;
vector<string>v(n);
for(int i{0};i<n;i++)
{
cin>>v[i];
}
int count{0};
sort(v.begin(),v.end());
for(int i{0};i<m;i++)
{
string tmp;
cin>>tmp;
if(binary_search(v.begin(),v.end(),tmp))
count++;
}
cout<<count;
return 0;
}
아마 많은 사람들이 vector를 사용하면 find로 값을 찾을 것이라고 생각합니다.
그래서 다음과 같은 코드를 사용해서 제출하는 사람도 있었을 것이라 생각합니다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n,m;
cin>>n>>m;
vector<string>v(n);
for(int i{0};i<n;i++)
{
cin>>v[i];
}
int count{0};
for(int i{0};i<m;i++)
{
string tmp;
cin>>tmp;
if(find(v.begin(),v.end(),tmp)!=v.end())
count++;
}
cout<<count;
return 0;
}
하지만 문자열의 개수가 10,000개 주어지기 때문에 일일이 모든 원소를 찾아보게 되면 시간초과에 걸릴 수 있습니다.
따라서 이진 탐색을 사용하였고 이진 탐색의 경우에는 vector를 정렬해서 사용해야 합니다.
그 점만 잊지 않고 푸신다면 해결할 수 있는 문제였습니다.
반응형
'백준 문제풀이' 카테고리의 다른 글
7785 번 : 회사에 있는 사람 (0) | 2023.08.29 |
---|---|
1735 번 : 분수 합 (0) | 2023.07.19 |
13241 번 : 최소공배수 (0) | 2023.07.14 |
9665 번 : 돌 게임 (0) | 2023.06.23 |
1935 번 : 후위표기식2 (0) | 2023.06.07 |