๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 1764๋ฒˆ: ๋“ฃ๋ณด์žก

by nitronium102 2022. 7. 10.

๋ฌธ์ œ

๊น€์ง„์˜์ด ๋“ฃ๋„ ๋ชปํ•œ ์‚ฌ๋žŒ์˜ ๋ช…๋‹จ๊ณผ, ๋ณด๋„ ๋ชปํ•œ ์‚ฌ๋žŒ์˜ ๋ช…๋‹จ์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋“ฃ๋„ ๋ณด๋„ ๋ชปํ•œ ์‚ฌ๋žŒ์˜ ๋ช…๋‹จ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋“ฃ๋„ ๋ชปํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜ 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";
}

๋Œ“๊ธ€