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



문자열 처리를 진행하면서 구현을 해주면 해결할 수 있다.

문자열이 동일한지를 판단하기 위해 set을 이용하면 수월하게 해결할 수 있다.


set은 연관 컨테이너로서 key값의 중복을 허용하지 않으며(key값은 1개 이상일 수 있다)

map과 다르게 키만 지정할 수 있다. 또한, 디폴트로 오름차순으로 정렬되어 있다.

(만약 내림차순으로 구하고자 한다면 set의 자료형 옆에 greater를 붙여주면 된다)



N개의 자료를 입력받은 뒤에

M개의 자료를 입력받으면서  이전에 N개를 입력받은 set 변수에 담겨있는지 확인한 뒤에

있다면 정답을 출력할 set 변수에 담은 뒤 출력해주면 된다.



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
#include <iostream>
#include <set>
using namespace std;
 
int main(){
    
    std::ios_base::sync_with_stdio(false);
    int N,M;
    cin>>N>>M;
    
    set<string> st;
    string s;
    
    for(int i=0;i<N;i++){
        cin>>s;
        st.insert(s);
    }
    
    set<string,less<string>> ans;
    set<string>::iterator iter;
    for(int i=0;i<M;i++){
        cin>>s;
        
        iter=st.find(s);
        if(iter!=st.end())
            ans.insert(s);
    }
    
    cout<<ans.size()<<endl;
    for(iter=ans.begin();iter!=ans.end();iter++){
        cout<<*iter<<endl;
    }
    
    return 0;
}
 
cs


+ Recent posts