μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄ Baekjoon

[λ°±μ€€] λ¬Έμžμ—΄ 처리 - 1764. λ“£λ³΄μž‘

λ˜νš¨λ‹ˆ 2020. 4. 6. 21:56

문제

κΉ€μ§„μ˜μ΄ 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단과, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단이 μ£Όμ–΄μ§ˆ λ•Œ, 듣도 보도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫째 쀄에 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ 수 N, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 수 M이 μ£Όμ–΄μ§„λ‹€. μ΄μ–΄μ„œ λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 걸쳐 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ 이름과, N+2μ§Έ 쀄뢀터 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 이름이 μˆœμ„œλŒ€λ‘œ μ£Όμ–΄μ§„λ‹€. 이름은 띄어쓰기 없이 μ˜μ–΄ μ†Œλ¬Έμžλ‘œλ§Œ 이루어지며, κ·Έ κΈΈμ΄λŠ” 20 μ΄ν•˜μ΄λ‹€. N, M은 500,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.

 

좜λ ₯

λ“£λ³΄μž‘μ˜ μˆ˜μ™€ κ·Έ λͺ…단을 μ‚¬μ „μˆœμœΌλ‘œ 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1

3 4
ohhenrie
charlie
baesangwook
obama
baesangwook
ohhenrie
clinton

 

예제 좜λ ₯1

2
baesangwook
ohhenrie

 

생각

μ²˜μŒμ— find() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ³΄λŠ” κ²ƒμœΌλ‘œ ν–ˆλ‹€. O(N)의 μ‹œκ°„λ³΅μž‘λ„κ°€ λ‚˜μ™€ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ‚˜μ˜¨λ‹€. 

binary_search()λ₯Ό μ΄μš©ν•΄μ„œ ν’€μ–΄μ•Όν•œλ‹€. (μ‹œκ°„λ³΅μž‘λ„ μƒκ°ν•΄μ•Όλ˜λŠ” 문제 => dp, 뢄할정볡! )

push_back을 μ‚¬μš©ν•˜λŠ” 것보닀 resize() λ₯Ό μ‚¬μš©ν•΄μ„œ 미리 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜λ©΄ λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ 쀄일 수 μžˆλ‹€.

λ°±μ€€μ—μ„œ μ‹€ν–‰ν•΄λ³΄λ‹ˆ 200KBλ‚˜ 차이가 났닀.

 

μž‘μ„±ν•œ μ½”λ“œ

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main(int argc, const char *argv[])
{
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
 
    int n, m;
    vector<string> a;      //듣도 λͺ»ν•œ μ‚¬λžŒ
    vector<string> result; //듣도 λ³΄λ„ λͺ»ν•œ μ‚¬λžŒ
 
    cin >> n >> m;
    a.resize(n);
 
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
 
    // μ΄μ§„ νƒμƒ‰μ„ μœ„ν•œ μ •λ ¬
    sort(a.begin(), a.end());
 
    for (int i = 0; i < m; i++)
    {
        string s;
        cin >> s;
        if (binary_search(a.begin(), a.end(), s))
        {
            result.push_back(s);
        }
    }
 
    sort(result.begin(), result.end());
 
    cout << result.size() <<"\n";
    for (int i = 0; i < result.size(); i++)
    {
        cout << result[i] << "\n";
    }
 
    return 0;
}
Colored by Color Scripter
λ°˜μ‘ν˜•