✨ Algorithm

[λ°±μ€€/C++] 1764번: λ“£λ³΄μž‘

nitronium102 2022. 7. 10. 22:57

문제

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

μž…λ ₯

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

듣도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…λ‹¨μ—λŠ” μ€‘λ³΅λ˜λŠ” 이름이 μ—†μœΌλ©°, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단도 λ§ˆμ°¬κ°€μ§€μ΄λ‹€.

좜λ ₯

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

풀이

쀑볡이 μ—†λ‹€ + 검색 ν•„μš” -> set을 μ‚¬μš©ν•˜λ©΄ λΉ λ₯΄κ²Œ ν’€ 수 μžˆλŠ” 문제

1. 듣도 λͺ»ν•œ μ‚¬λžŒμ„ set에 μ €μž₯ν•œλ‹€.

2. 보도 λͺ»ν•œ μ‚¬λžŒμ˜ μž…λ ₯을 λ°›μœΌλ©΄μ„œ ν•΄λ‹Ή μ‚¬λžŒμ΄ '듣도 λͺ»ν•œ μ‚¬λžŒ' set에 μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.

2-1. '듣도 λͺ»ν•œ μ‚¬λžŒ' set에 μžˆλŠ” 경우 κ·Έ μ‚¬λžŒμ„ '듣도 보도 λͺ»ν•œ μ‚¬λžŒ' set에 μΆ”κ°€ν•œλ‹€.

3. 좜λ ₯ν•œλ‹€.

#include <iostream>
#include <set>

using namespace std;

int main() {
    int n, m;
    string input;
    set<string> s, answer;

    // μž…λ ₯
    cin >> n >> m;

    while (n--) {
        cin >> input;
        s.insert(input);
    }

    for (int i = 0; i < m; i++) {
        cin >> input;
        if (s.find(input) != s.end())
            answer.insert(input);
    }

    // 좜λ ₯
    cout << answer.size() << "\n";
    for (auto pos = answer.begin(); pos != answer.end(); pos++)
        cout << *pos << "\n";
}