알고리즘

[BOJ] 1764 듣보잡

졔졔311 2023. 5. 31. 19:16
728x90
반응형

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

---------------------------------------------------핵심 알고리즘--------------------------------------------

 

set+sort

 

---------------------------------------------------풀이----------------------------------------------------

 

듣도 못한 사람의 명단을 set에 저장한 뒤, 보도 못한 사람이 set에 존재할 경우 교집합으로 vector에 저장한다.

사전순으로 출력해야 하므로 vector를 sorting하여 순서대로 출력한다.

#define FASTIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <stack>
#include <limits.h>
#include <map>
#include <set>

using namespace std;

set<string> s;

// set A와 set B의 교집합=? 사전순 출력
int main(void){
    FASTIO;
    int N, M;
    cin >> N >> M;
    // 교집합을 저장할 벡터
    vector<string> v;

    string tmp;
    for(int i = 0; i < N; i++){
        cin >> tmp;
        s.insert(tmp);
    }
    for(int i = 0; i < M; i++){
        cin >> tmp;
        // set에 있는 값이면 교집합으로 저장
        if(s.find(tmp) != s.end()){
            v.push_back(tmp);
        }
    }

    // 사전순으로 출력
    sort(v.begin(), v.end());
    cout << v.size() << "\n";
    for(int i = 0; i < v.size(); i++){
        cout << v[i] << "\n";
    }
    return 0;
}

 

---------------------------------------------------후기----------------------------------------------------

 

두 집합의 교집합을 출력하는 문제.

파이썬으로 하면 몹시 간단할 것 같다.

728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ] 1931 회의실 배정  (0) 2023.06.01
[BOJ] 1780 종이의 개수  (0) 2023.05.31
[BOJ] 1697 숨바꼭질  (0) 2023.05.31
[BOJ] 1676 팩토리얼 0의 개수  (0) 2023.05.31
[BOJ] 1620 나는야 포켓몬 마스터 이다솜  (0) 2023.05.30