ㅂㄷㅂㄷㅂㄷ 시간초과 났는데 해결을 못했다
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#pragma warning(disable:4996)
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<string> s1(n);
for (int i = 0; i < n; i++)
cin >> s1[i];
vector<string> s2(m);
for (int i = 0; i < m; i++)
cin >> s2[i];
int ans = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (s2[i] == s1[j])
{
ans++;
}
}
}
cout << ans << "\n";
return 0;
}
구현은 위처럼 했다
짜면서 이렇게 하면 시간초과 날텐데...! 날텐데...! 싶었는데 정말로 시간초과 났다.
m 집합을 n번 확인하는데 확인하는 부분이 문자열 길이만큼 일테니 시간초과가 날 수 밖에 없지....
헉 대박 map을 쓰면 된다!!
map을 쓰면 값을 찾는데 log n이 걸릴 것이므로 m log n 시간이 걸릴 것이다.
와.... 시간초과가 나면 이렇게 다른 자료구조를 써서 해결가능하구나
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()
#pragma warning(disable:4996)
using namespace std;
using i64 = long long;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
map<string, bool> mp;
for (int i = 0; i < n; i++)
{
string str;
cin >> str;
mp[str] = true;
}
int cnt = 0;
for (int i = 0; i < m; i++)
{
string str;
cin >> str;
if (mp[str])
cnt++;
}
cout << cnt << "\n";
return 0;
}
'prompt' 카테고리의 다른 글
[토요라운드] 20/11/07 후기 (0) | 2020.11.07 |
---|---|
[토요라운드] E. 풍선 공장 (15810) (0) | 2020.09.05 |
[토요라운드] C. 카약과 강풍 (2891) (0) | 2020.09.05 |
[토요라운드] B. 2루수 이름이 뭐야 (17350) (0) | 2020.09.05 |
[토요라운드] A. 운동장 한 바퀴(16486) (0) | 2020.09.05 |