250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(SWEA c++)2948. 문자열 교집합 본문
728x90
반응형
문자열을 비교해야 한다.
처음에는 map을 이용하여 접근했지만 시간초과로 인해 vector 방식으로 바꿨다.
N, M 크기만큼 v1, v2에 string을 저장한다.
저장이 끝나면 반드시 sort를 하여 오름차순으로 비교할 수 있도록 한다.
while문을 통해 v1과 v2의 iterator를 조건으로 비교한다.
itr1 = v1.begin()
itr2 = v2.begin()
으로 시작하여
while문의 조건으로 둘 중에 하나가 벡터의 끝에 다다르면 탈출한다.
만약 두 반복자에 해당하는 값이 같으면 ans++과 더불어 두 반복자를 + 1 해주어 진행한다.
하지만 둘 중 하나의 값이 작으면 작은 값에 해당하는 반복자를 + 1 해주면서 진행한다.
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
for(int tc = 1; tc <= t; tc++)
{
int N, M, ans = 0;
vector<string> v1, v2;
string s;
cin >> N >> M;
for(int i = 0; i < N; i++)
{
cin >> s;
v1.push_back(s);
}
for(int i = 0; i < M; i++)
{
cin >> s;
v2.push_back(s);
}
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
auto itr1 = v1.begin();
auto itr2 = v2.begin();
while(itr1 != v1.end() && itr2 != v2.end())
{
if(*itr1 == *itr2)
{
ans++;
itr1++;
itr2++;
}
else if(*itr1 < *itr2)
itr1++;
else if(*itr1 > *itr2)
itr2++;
}
cout << "#" << tc << " " << ans << endl;
}
return 0;
}
728x90
반응형
'SW Expert Academy' 카테고리의 다른 글
(SWEA c++)3032. 홍준이의 숫자 놀이 (0) | 2020.10.22 |
---|---|
(SWEA c++)2930. 힙 (0) | 2020.10.22 |
(SWEA c++)2817. 부분 수열의 합 (0) | 2020.10.21 |
(SWEA c++)2814. 최장경로 (0) | 2020.10.21 |
(SWEA c++)2805. 농작물 수확하기 (0) | 2020.10.21 |