백준 14425 - 문자열 집합

LeeTaeHwa·2022년 3월 15일
0

알고리즘

목록 보기
6/6

문제


총 N개의 문자열로 이루어진 집합 S가 주어진다.

입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.

입력


첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.

다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.

다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.

입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.

출력


첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.

해설


본 문제는 STL의 도움 없이 푼다고 하면 어려울지도 모르겠다. 하지만 STL 컨테이너를 적절히 활용한다면 정말 간단하게 구현이 가능하다. 그냥 set을 이용하여서 중복여부만 따져주면 해결이 된다. 물론, 여기서 주의할 점이 있다. 바로 비교군에 속한 문자열에 중복이 존재 할 수가 있다는 점이다. 그래서 비교군에 속하는 문자열이 추가되었다면 제거해준 다음에 탐색을 진행하면 해결된다.

#include <iostream>
#include <string>
#include <set>

auto main(int argc, char* argv[]) -> int {
    auto n = 0;
    auto m = 0;
    auto num = 0;

    auto s = std::set<std::string>();

    std::cin>>n>>m;
    
    while (n--) {
        auto str = std::string();
        std::cin >> str;
        s.insert(str);
    }

    while (m--) {
        auto str = std::string();
        auto size = s.size();

        std::cin >> str;

        s.insert(str);
        if (s.size() == size) num++;
        else s.erase(str);
    }

    std::cout << num << std::endl;

    return 0;
}
profile
하늘을 향해 걸어가고 있습니다.

0개의 댓글